{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-b57_1z7PDe0"
      },
      "source": [
        "# **Efficient Quantized Vector Ingestion with Cohere and MongoDB**\n",
        "\n",
        "\n",
        "---\n",
        "\n",
        "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/mongodb-developer/GenAI-Showcase/blob/main/notebooks/advanced_techniques/evaluating_information_retrival_techniques_mongondb_langchain.ipynb)\n",
        "\n",
        "\n",
        "You can view an article version of this notebook here:\n",
        "\n",
        "[![View Article](https://img.shields.io/badge/View%20Article-blue)](https://mdb.link/quantized_vector_ingestion_cohere)\n",
        "\n",
        "\n",
        "In this notebook, we cover the following:\n",
        "\n",
        "- What are quantization and vector quantization?\n",
        "- Example of scalar quantization\n",
        "- Efficient quantized vector ingestion with Cohere and MongoDB\n",
        "- Comparison of float32, BSON float32, and BSON int8 embeddings in vector search operations\n",
        "- Practical considerations for choosing the right embedding format for your AI application"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6ReN61zKS7F2"
      },
      "source": [
        "# **Prerequisute: Understanding Scalar Quantization**"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jAvAhj4ETHe1"
      },
      "source": [
        "Vector quantization is a lossy compression algorithm designed to reduce the dimensionality and memory requirements of high-dimensional vector data. It achieves this by mapping the original vectors to a smaller set of representative vectors. This process allows for significant data compression while preserving much of the essential information contained in the original vectors. Vector quantization technique is particularly useful in AI applications where some loss of precision is acceptable in exchange for reduced storage needs and lower latency in data retrieval steps.\n",
        "Let's demonstrate vector quantization using float32 values and quantizing to 8-bit integers. We'll use a simplified example with 1D vectors for clarity.\n",
        "\n",
        "```\n",
        "Float32: [1.23, 4.56, 2.34, 5.67, 3.45, 6.78, 1.89, 4.90]\n",
        "```\n",
        "```\n",
        "Int8: [0, 153, 51, 204, 102, 255, 30, 169]\n",
        "```\n",
        "Step 1:  Determine the range of values.\n",
        "```\n",
        "Min: 1.23\n",
        "Max: 6.78\n",
        "```\n",
        "Step 2: Define the quantization scale\n",
        "```\n",
        "Scale = (Max - Min) / 255 = (6.78 - 1.23) / 255 ≈ 0.0217\n",
        "```\n",
        "Step 3: Quantize to 8-bit integers using the formula below:\n",
        "```quantized = round((original - Min) / Scale)```\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PNdRtD3j-xZb"
      },
      "source": [
        "![image.png]()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "vzhn_lM8S6G4",
        "outputId": "37f935d6-6883-4df0-a438-6f4ce9822e95"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Original (float32):\n",
            "[1.23 4.56 2.34 5.67 3.45 6.78 1.89 4.9 ]\n",
            "\n",
            "Quantized (uint8):\n",
            "[  0 153  51 204 102 255  30 169]\n",
            "\n",
            "Quantization parameters - Min: 1.2300000190734863, Scale: 0.021764706630332798\n",
            "\n",
            "Reconstructed (float32):\n",
            "[1.23      4.5600004 2.3400002 5.67      3.45      6.78      1.8829412\n",
            " 4.9082355]\n",
            "\n",
            "Mean Absolute Error:\n",
            "0.0019118637\n",
            "\n",
            "Original memory usage: 32 bytes\n",
            "Quantized memory usage: 8 bytes\n",
            "Compression ratio: 4.00x\n"
          ]
        }
      ],
      "source": [
        "import numpy as np\n",
        "\n",
        "\n",
        "def quantize_vector(vector, bits=8):\n",
        "    \"\"\"Quantize a float32 vector to n-bit integers.\"\"\"\n",
        "\n",
        "    # Convert the vector to a numpy array\n",
        "    vector = np.array(vector, dtype=np.float32)\n",
        "\n",
        "    # Step 1: Determine the range of values.\n",
        "    min_val, max_val = vector.min(), vector.max()\n",
        "\n",
        "    # Step 2: Define the quantization scale\n",
        "    scale = (max_val - min_val) / (2**bits - 1)\n",
        "\n",
        "    # Step 3: Quantize to 8-bit integers using the formula below: quantized = round((original - Min) / Scale)\n",
        "    quantized = np.round((vector - min_val) / scale).astype(np.uint8)\n",
        "\n",
        "    return quantized, min_val, scale\n",
        "\n",
        "\n",
        "def dequantize_vector(quantized, min_val, scale, bits=8):\n",
        "    \"\"\"Dequantize the vector back to float32.\"\"\"\n",
        "    return (quantized.astype(np.float32) * scale) + min_val\n",
        "\n",
        "\n",
        "# Original float32 vector\n",
        "original = np.array([1.23, 4.56, 2.34, 5.67, 3.45, 6.78, 1.89, 4.90], dtype=np.float32)\n",
        "\n",
        "# Run Quantize\n",
        "quantized, min_val, scale = quantize_vector(original)\n",
        "\n",
        "# Dequantize (reconstruct)\n",
        "reconstructed = dequantize_vector(quantized, min_val, scale)\n",
        "\n",
        "# Print results\n",
        "print(\"Original (float32):\")\n",
        "print(original)\n",
        "print(\"\\nQuantized (uint8):\")\n",
        "print(quantized)\n",
        "print(f\"\\nQuantization parameters - Min: {min_val}, Scale: {scale}\")\n",
        "print(\"\\nReconstructed (float32):\")\n",
        "print(reconstructed)\n",
        "print(\"\\nMean Absolute Error:\")\n",
        "print(np.mean(np.abs(original - reconstructed)))\n",
        "\n",
        "# Memory usage\n",
        "print(f\"\\nOriginal memory usage: {original.nbytes} bytes\")\n",
        "print(f\"Quantized memory usage: {quantized.nbytes} bytes\")\n",
        "print(f\"Compression ratio: {original.nbytes / quantized.nbytes:.2f}x\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "NBZcT6I0_HAj"
      },
      "source": [
        "# **What we are building**\n",
        "\n",
        "This section provides a comprehensive guide to implementing efficient quantized vector ingestion and search using Cohere and MongoDB. We'll walk through the entire process, from generating quantized and non-quantized embeddings with Cohere's API to converting them into BSON format, ingesting them into MongoDB, and performing vector searches on the stored embeddings.\n",
        "\n",
        "\n",
        "The end result of this section is a fully functional system that demonstrates the practical implementation of quantized vector storage and retrieval. This setup will allow you to compare the performance and accuracy of different embedding types (float32, BSON float32, and BSON int8) in vector search operations."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "TD61tbFS_KJr"
      },
      "source": [
        "![image.png]()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "c9v4dywYOeEq"
      },
      "source": [
        "# **Step 1: Install Libraries and Set Environment Variables**\n",
        "\n",
        "For the code implementation in this tutorial, the following libraries are utilized:\n",
        "- `pandas`:  A data manipulation library for efficient handling of structured data. It's used for loading, cleaning, transforming, and analyzing data in various formats.\n",
        "- `cohere`: The official Cohere Python library. It will provide access to advanced language models, embedding generation, and text generation.\n",
        "- `pymongo`: The official Python driver for MongoDB. While commented out in the installation, it suggests potential use for interacting with MongoDB databases, enabling storage and retrieval of data.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "S-4BYA55-rHU",
        "outputId": "b4337fd5-35ef-455a-84a3-fa431574117c"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m89.9/89.9 kB\u001b[0m \u001b[31m1.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.1/13.1 MB\u001b[0m \u001b[31m47.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m249.2/249.2 kB\u001b[0m \u001b[31m10.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.1/139.1 kB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m47.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m76.4/76.4 kB\u001b[0m \u001b[31m4.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m78.0/78.0 kB\u001b[0m \u001b[31m4.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.4/1.4 MB\u001b[0m \u001b[31m37.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m38.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m60.8/60.8 kB\u001b[0m \u001b[31m3.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.6/12.6 MB\u001b[0m \u001b[31m50.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m307.7/307.7 kB\u001b[0m \u001b[31m11.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m82.7/82.7 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m385.0/385.0 kB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m147.8/147.8 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m82.1/82.1 kB\u001b[0m \u001b[31m3.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m119.4/119.4 kB\u001b[0m \u001b[31m6.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m3.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.8/134.8 kB\u001b[0m \u001b[31m9.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.8/56.8 kB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
            "cudf-cu12 24.6.1 requires pandas<2.2.3dev0,>=2.0, but you have pandas 2.2.3 which is incompatible.\n",
            "google-colab 1.0.0 requires pandas==2.2.2, but you have pandas 2.2.3 which is incompatible.\u001b[0m\u001b[31m\n",
            "\u001b[0m"
          ]
        }
      ],
      "source": [
        "!pip install --quiet --upgrade pandas cohere pymongo"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "aWs_-Di1BsD9"
      },
      "source": [
        "[Click here to get your Cohere API Key](https://dashboard.cohere.com/api-keys)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "tYszNPCw_35R",
        "outputId": "3854a281-b3cc-495b-be5e-559cb7a1f5ba"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "sagemaker.config INFO - Not applying SDK defaults from location: /etc/xdg/sagemaker/config.yaml\n",
            "sagemaker.config INFO - Not applying SDK defaults from location: /root/.config/sagemaker/config.yaml\n",
            "Enter Cohere API Key: ··········\n"
          ]
        }
      ],
      "source": [
        "import getpass\n",
        "import os\n",
        "\n",
        "import cohere\n",
        "\n",
        "COHERE_API_KEY = getpass.getpass(\"Enter Cohere API Key: \")\n",
        "os.environ[\"COHERE_API_KEY\"] = COHERE_API_KEY"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qOOC8a3qPCgU"
      },
      "source": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5qxP9bE1OzDq"
      },
      "source": [
        "# **Step 2: Data Loading**\n",
        "\n",
        "This step involves generating a small structured dataset of sentences with placeholder fields for various embedding types. The dataset is designed to facilitate the demonstration and comparison of different embedding techniques in natural language processing and database storage.\n",
        "\n",
        "The data is structured as a list of dictionaries, where each dictionary represents a sentence and its associated embedding attributes. Each entry contains a `sentence` key with a factual statement as its value, along with four embedding-related keys: `float32_embedding`, `int8_embedding`, `bson_float32_embedding`, and `bson_int8_embedding`. These keys are initially set to `None`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "-sHPJRmOAU-o"
      },
      "outputs": [],
      "source": [
        "sentences = [\n",
        "    {\n",
        "        \"sentence\": \"Water boils at 100 degrees Celsius at standard atmospheric pressure.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The Great Wall of China is visible from space.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Photosynthesis converts light energy into chemical energy in plants.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"DNA contains the genetic instructions for all living organisms.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Jupiter is the largest planet in our solar system.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The Eiffel Tower was completed in Paris in 1889.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Honey never spoils due to its unique chemical properties.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The human body contains approximately 206 bones in adulthood.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Mount Everest is the highest peak on Earth at 8,848m.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Shakespeare wrote 37 plays and 154 sonnets during his lifetime.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The speed of light in vacuum is 299,792,458 meters/second.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Penguins are flightless birds found primarily in the Southern Hemisphere.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The Mona Lisa was painted by Leonardo da Vinci.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Oxygen makes up about 21% of Earth's atmosphere by volume.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The American Civil War lasted from 1861 to 1865.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Antibiotics are ineffective against viral infections like the common cold.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The human heart beats approximately 100,000 times per day.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"Gold is one of the least reactive chemical elements.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"The first successful powered aircraft flew in 1903.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "    {\n",
        "        \"sentence\": \"There are 118 elements in the periodic table.\",\n",
        "        \"float32_embedding\": None,\n",
        "        \"int8_embedding\": None,\n",
        "        \"bson_float32_embedding\": None,\n",
        "        \"bson_int8_embedding\": None,\n",
        "    },\n",
        "]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "K7VQ-vPkRirt"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "\n",
        "# Convert the list of dictionaries into a pandas DataFrame\n",
        "sentences_df = pd.DataFrame(sentences)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "5z2jegcAR3Ub",
        "outputId": "35eadfef-8697-43dc-b343-ada29d1bac7a"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "repr_error": "Out of range float values are not JSON compliant: nan",
              "type": "dataframe",
              "variable_name": "sentences_df"
            },
            "text/html": [
              "\n",
              "  <div id=\"df-b836da53-f360-489b-aa61-460ea164b188\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sentence</th>\n",
              "      <th>float32_embedding</th>\n",
              "      <th>int8_embedding</th>\n",
              "      <th>bson_float32_embedding</th>\n",
              "      <th>bson_int8_embedding</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Water boils at 100 degrees Celsius at standard...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>The Great Wall of China is visible from space.</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Photosynthesis converts light energy into chem...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>DNA contains the genetic instructions for all ...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Jupiter is the largest planet in our solar sys...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b836da53-f360-489b-aa61-460ea164b188')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-b836da53-f360-489b-aa61-460ea164b188 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-b836da53-f360-489b-aa61-460ea164b188');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-b5555cd3-9f4a-4cb4-a4a7-64cef62d5377\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b5555cd3-9f4a-4cb4-a4a7-64cef62d5377')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-b5555cd3-9f4a-4cb4-a4a7-64cef62d5377 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "text/plain": [
              "                                            sentence float32_embedding  \\\n",
              "0  Water boils at 100 degrees Celsius at standard...              None   \n",
              "1     The Great Wall of China is visible from space.              None   \n",
              "2  Photosynthesis converts light energy into chem...              None   \n",
              "3  DNA contains the genetic instructions for all ...              None   \n",
              "4  Jupiter is the largest planet in our solar sys...              None   \n",
              "\n",
              "  int8_embedding bson_float32_embedding bson_int8_embedding  \n",
              "0           None                   None                None  \n",
              "1           None                   None                None  \n",
              "2           None                   None                None  \n",
              "3           None                   None                None  \n",
              "4           None                   None                None  "
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "sentences_df.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sPAFgdtXPOWl"
      },
      "source": [
        "# **Step 3: Embedding Generation With Cohere**\n",
        "\n",
        "This step demonstrates the process of generating embeddings for our sentence dataset using the Cohere API. We will define a custom function, `get_cohere_embeddings`, for efficient embedding generation.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "Igl5sSXr_0Yd"
      },
      "outputs": [],
      "source": [
        "# Initialize Cohere Client\n",
        "co = cohere.Client(COHERE_API_KEY)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "0YZBoNpdAa9i"
      },
      "outputs": [],
      "source": [
        "from typing import List, Tuple\n",
        "\n",
        "\n",
        "def get_cohere_embeddings(sentences: List[str]) -> Tuple[List[float], List[int]]:\n",
        "    \"\"\"\n",
        "    Generates embeddings for the provided sentences using Cohere's embedding model.\n",
        "\n",
        "    Args:\n",
        "        sentences (list of str): List of sentences to generate embeddings for.\n",
        "\n",
        "    Returns:\n",
        "      list: A list of embeddings, where each embedding corresponds to a sentence.\n",
        "            The embeddings are generated using the \"embed-english-v3.0\" model and include both\n",
        "            float and int8 types.\n",
        "    \"\"\"\n",
        "    genereated_embedding = co.embed(\n",
        "        texts=sentences,\n",
        "        model=\"embed-english-v3.0\",\n",
        "        input_type=\"search_document\",\n",
        "        embedding_types=[\"float\", \"int8\"],\n",
        "    ).embeddings\n",
        "\n",
        "    return genereated_embedding.float, genereated_embedding.int8"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "LW4mv99xQv9U"
      },
      "outputs": [],
      "source": [
        "# Iterate through each row in the DataFrame\n",
        "for index, row in sentences_df.iterrows():\n",
        "    # Fetch the embeddings for the sentence\n",
        "    embeddings = get_cohere_embeddings([row[\"sentence\"]])\n",
        "\n",
        "    # Assign the embeddings to the corresponding columns in the DataFrame\n",
        "    sentences_df.at[index, \"float32_embedding\"] = embeddings[0][0]  # float32_embedding\n",
        "    sentences_df.at[index, \"int8_embedding\"] = embeddings[1][0]  # int8_embedding"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "1hmKwS-0TgVf",
        "outputId": "49931b3d-2efb-4011-dc26-7391ed009289"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "repr_error": "Out of range float values are not JSON compliant: nan",
              "type": "dataframe",
              "variable_name": "sentences_df"
            },
            "text/html": [
              "\n",
              "  <div id=\"df-8dfdc427-aa73-45bd-bd54-74c9214b8070\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sentence</th>\n",
              "      <th>float32_embedding</th>\n",
              "      <th>int8_embedding</th>\n",
              "      <th>bson_float32_embedding</th>\n",
              "      <th>bson_int8_embedding</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Water boils at 100 degrees Celsius at standard...</td>\n",
              "      <td>[0.058654785, 0.02130127, -0.02558899, -0.0517...</td>\n",
              "      <td>[74, 26, -33, -66, 29, -47, 24, 20, -52, 56, -...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>The Great Wall of China is visible from space.</td>\n",
              "      <td>[0.03451538, 0.026901245, 0.008277893, 0.01005...</td>\n",
              "      <td>[43, 33, 9, 12, -39, -39, 16, -79, 5, 26, -26,...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Photosynthesis converts light energy into chem...</td>\n",
              "      <td>[-0.021697998, -0.02961731, -0.005004883, 0.02...</td>\n",
              "      <td>[-28, -38, -7, 30, -72, -19, 18, 3, -39, -27, ...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>DNA contains the genetic instructions for all ...</td>\n",
              "      <td>[-0.020843506, -0.022567749, -0.033996582, -0....</td>\n",
              "      <td>[-27, -29, -44, -27, -43, 5, -14, 40, 10, 76, ...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Jupiter is the largest planet in our solar sys...</td>\n",
              "      <td>[-0.061828613, -0.016860962, -0.059539795, 0.0...</td>\n",
              "      <td>[-79, -22, -76, 0, -47, -31, -8, 69, -67, 23, ...</td>\n",
              "      <td>None</td>\n",
              "      <td>None</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-8dfdc427-aa73-45bd-bd54-74c9214b8070')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-8dfdc427-aa73-45bd-bd54-74c9214b8070 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-8dfdc427-aa73-45bd-bd54-74c9214b8070');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-4f89b5d7-dfbc-4478-bb52-53998945e7d4\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-4f89b5d7-dfbc-4478-bb52-53998945e7d4')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-4f89b5d7-dfbc-4478-bb52-53998945e7d4 button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "text/plain": [
              "                                            sentence  \\\n",
              "0  Water boils at 100 degrees Celsius at standard...   \n",
              "1     The Great Wall of China is visible from space.   \n",
              "2  Photosynthesis converts light energy into chem...   \n",
              "3  DNA contains the genetic instructions for all ...   \n",
              "4  Jupiter is the largest planet in our solar sys...   \n",
              "\n",
              "                                   float32_embedding  \\\n",
              "0  [0.058654785, 0.02130127, -0.02558899, -0.0517...   \n",
              "1  [0.03451538, 0.026901245, 0.008277893, 0.01005...   \n",
              "2  [-0.021697998, -0.02961731, -0.005004883, 0.02...   \n",
              "3  [-0.020843506, -0.022567749, -0.033996582, -0....   \n",
              "4  [-0.061828613, -0.016860962, -0.059539795, 0.0...   \n",
              "\n",
              "                                      int8_embedding bson_float32_embedding  \\\n",
              "0  [74, 26, -33, -66, 29, -47, 24, 20, -52, 56, -...                   None   \n",
              "1  [43, 33, 9, 12, -39, -39, 16, -79, 5, 26, -26,...                   None   \n",
              "2  [-28, -38, -7, 30, -72, -19, 18, 3, -39, -27, ...                   None   \n",
              "3  [-27, -29, -44, -27, -43, 5, -14, 40, 10, 76, ...                   None   \n",
              "4  [-79, -22, -76, 0, -47, -31, -8, 69, -67, 23, ...                   None   \n",
              "\n",
              "  bson_int8_embedding  \n",
              "0                None  \n",
              "1                None  \n",
              "2                None  \n",
              "3                None  \n",
              "4                None  "
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "sentences_df.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bJ8a3nvA6DwQ"
      },
      "source": [
        "# **Step 4: Generate BSON Vectors**\n",
        "\n",
        "This step introduces a crucial data transformation process that, while potentially unfamiliar to some developers, is integral to building high-performant AI applications. When optimizing AI systems for scale and efficiency, certain techniques and data formats become essential to application development. The operations demonstrated here are fundamental to showcasing the memory optimization benefits of BSON (Binary JSON) and MongoDB's storage capabilities.\n",
        "\n",
        "The operations demonstrated here are fundamental to showcasing the memory optimization benefits of BSON (Binary JSON) and MongoDB's storage capabilities. By converting our embeddings into BSON format, we can compare the storage efficiency of the BSON data format vs the non-BSON data format.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "veCHfjGX6Nb2"
      },
      "outputs": [],
      "source": [
        "from bson.binary import Binary, BinaryVectorDtype\n",
        "\n",
        "\n",
        "def generate_bson_vector(array, data_type):\n",
        "    return Binary.from_vector(array, BinaryVectorDtype(data_type))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "D9wTp_556C-b"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "\n",
        "# For all data points in the sentences_df generate BSON vecotrs for float32 and int8 embeddings\n",
        "sentences_df[\"bson_float32_embedding\"] = sentences_df[\"float32_embedding\"].apply(\n",
        "    lambda x: generate_bson_vector(\n",
        "        np.array(x, dtype=np.float32), BinaryVectorDtype.FLOAT32\n",
        "    )\n",
        ")\n",
        "sentences_df[\"bson_int8_embedding\"] = sentences_df[\"int8_embedding\"].apply(\n",
        "    lambda x: generate_bson_vector(np.array(x, dtype=np.int8), BinaryVectorDtype.INT8)\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "r-bCMRWwDbT_"
      },
      "outputs": [],
      "source": [
        "# remove the coloumn int8_embedding from the dataframe\n",
        "sentences_df = sentences_df.drop(columns=[\"int8_embedding\"])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "TuaTeJ7N7g7C",
        "outputId": "f170575e-1a9a-44ad-d5de-cf2401f6ff07"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "summary": "{\n  \"name\": \"sentences_df\",\n  \"rows\": 20,\n  \"fields\": [\n    {\n      \"column\": \"sentence\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 20,\n        \"samples\": [\n          \"Water boils at 100 degrees Celsius at standard atmospheric pressure.\",\n          \"Gold is one of the least reactive chemical elements.\",\n          \"Antibiotics are ineffective against viral infections like the common cold.\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"float32_embedding\",\n      \"properties\": {\n        \"dtype\": \"object\",\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"bson_float32_embedding\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 20,\n        \"samples\": [\n          \"b'\\\\'\\\\x00\\\\x00@p=\\\\x00\\\\x80\\\\xae<\\\\x00\\\\xa0\\\\xd1\\\\xbc\\\\x00\\\\xe0S\\\\xbd\\\\x00\\\\xc0\\\\xc0<\\\\x00`\\\\x17\\\\xbd\\\\x00\\\\xc0\\\\xa4<\\\\x00\\\\xe0\\\\x85<\\\\x00\\\\x00\\\\'\\\\xbd\\\\x00\\\\x806=\\\\x00\\\\xa0\\\\x8f\\\\xbb\\\\x00\\\\x80\\\\x939\\\\x00\\\\xc0p=\\\\x00@\\\\xb8\\\\xbc\\\\x00`>\\\\xbb\\\\x00\\\\xc0\\\\xdb\\\\xbb\\\\x00\\\\x80\\\\xcb<\\\\x00@?\\\\xbb\\\\x00 \\\\x89\\\\xbc\\\\x00\\\\xc0r\\\\xbc\\\\x00@\\\\x9d\\\\xbb\\\\x00\\\\x80\\\\x1d\\\\xbb\\\\x00\\\\xa0\\\\x8d\\\\xbc\\\\x00@\\\\x04=\\\\x00\\\\xe0\\\\xa3<\\\\x00\\\\xa0\\\\x94\\\\xbb\\\\x00@Z\\\\xbd\\\\x00\\\\xa0\\\\xce\\\\xbc\\\\x00`G;\\\\x00\\\\x00\\\\xcf\\\\xbb\\\\x00\\\\xa0U:\\\\x00\\\\xa0\\\\xb3<\\\\x00\\\\x00\\\\x1b=\\\\x00 \\\\xdb<\\\\x00\\\\xc0(\\\\xbd\\\\x00\\\\xc0;\\\\xbc\\\\x00\\\\x00\\\\xe4\\\\xbc\\\\x00 \\\\x13;\\\\x00`2\\\\xbc\\\\x00\\\\x80\\\\x7f\\\\xbb\\\\x00\\\\xe0\\\\xac<\\\\x00\\\\x00\\\\x88\\\\xbc\\\\x00\\\\xc0\\\\xb0\\\\xbb\\\\x00\\\\xe0\\\\x99<\\\\x00\\\\xc0\\\\xbd\\\\xbc\\\\x00`\\\\xbb\\\\xbc\\\\x00\\\\xc0,<\\\\x00\\\\xc0\\\\xc2\\\\xbc\\\\x00`\\\\x0b\\\\xbc\\\\x00\\\\xa0~\\\\xbc\\\\x00 \\\\xb0<\\\\x00\\\\xe05\\\\xbd\\\\x00\\\\xc0\\\\x19=\\\\x00\\\\xc0\\\\xfa\\\\xbc\\\\x00`\\\\x01\\\\xbd\\\\x00\\\\xe0\\\\x9f\\\\xbc\\\\x00 \\\\x84=\\\\x00\\\\x80R\\\\xbd\\\\x00\\\\x801=\\\\x00\\\\xe0\\\\xd3\\\\xbd\\\\x00@)\\\\xbd\\\\x00\\\\x00\\\\x1b\\\\xbd\\\\x00\\\\xa0\\\\x9c=\\\\x00\\\\xa0Y=\\\\x00\\\\x80\\\\x95\\\\xbc\\\\x00 \\\\x19\\\\xbc\\\\x00\\\\x00\\\\x08=\\\\x00\\\\xa0Q<\\\\x00\\\\xc0\\\\x91=\\\\x00\\\\xc0\\\\x07\\\\xbc\\\\x00\\\\xe0\\\\r\\\\xbd\\\\x00\\\\xc0.=\\\\x00`\\\\x86<\\\\x00\\\\xa0f=\\\\x00\\\\x00\\\\\\\\\\\\xbc\\\\x00\\\\x00\\\\x88\\\\xbd\\\\x00\\\\x80\\\\x14=\\\\x00\\\\xc0\\\\xcd<\\\\x00\\\\x80\\\\x83<\\\\x00\\\\xc0\\\\x11=\\\\x00\\\\xa0\\\\xb8;\\\\x00\\\\x80\\\\x1a\\\\xbc\\\\x00\\\\xc0j<\\\\x00\\\\xe0k\\\\xbc\\\\x00@o<\\\\x00`\\\\x9b9\\\\x00\\\\xc0p\\\\xbb\\\\x00 \\\\x06\\\\xbc\\\\x00\\\\xa0\\\\x9f\\\\xbc\\\\x00@\\\\x81\\\\xbc\\\\x00`T\\\\xbc\\\\x00\\\\xe0\\\\xa1<\\\\x00`\\\\x82\\\\xbd\\\\x00\\\\xe0\\\\xf5<\\\\x00`B<\\\\x00 \\\\xc2\\\\xbc\\\\x00 \\\\xf9\\\\xbc\\\\x00\\\\xc0\\\\xc5\\\\xbb\\\\x00\\\\xa0\\\\x01\\\\xbd\\\\x00 \\\\xae<\\\\x00\\\\xe0\\\\xfc\\\\xbc\\\\x00`\\\\xbc;\\\\x00\\\\xc0\\\\xb0;\\\\x00`\\\\x11\\\\xbd\\\\x00\\\\xe0\\\\xa3\\\\xbc\\\\x00\\\\xa00=\\\\x00\\\\xa0\\\\x10=\\\\x00\\\\xa0:<\\\\x00@\\\\xb2\\\\xbb\\\\x00\\\\xc0\\\\xd9\\\\xbb\\\\x00\\\\xa0\\\\xc4\\\\xbc\\\\x00\\\\xc0 =\\\\x00\\\\xa0N<\\\\x00@\\\\xd8\\\\xbc\\\\x00`6\\\\xbd\\\\x00\\\\x00\\\\x14\\\\xbc\\\\x00\\\\x00*\\\\xbb\\\\x00\\\\x80\\\\x8c;\\\\x00`\\\\xd0<\\\\x00\\\\xc0\\\\x8b\\\\xbc\\\\x00 \\\\xf5\\\\xbb\\\\x00\\\\xa0\\\\xd2<\\\\x00\\\\xc0\\\\x1d\\\\xbc\\\\x00\\\\xa0\\\\x8d;\\\\x00 r\\\\xbb\\\\x00\\\\x00\\\\xb3:\\\\x00@\\\\xae;\\\\x00`y\\\\xbc\\\\x00\\\\x008\\\\xbd\\\\x00\\\\xa0\\\\xf8<\\\\x00\\\\xe0\\\\xe1\\\\xbc\\\\x00@\\\\xa1<\\\\x00`\\\\x92\\\\xbc\\\\x00\\\\x00\\\\xe8\\\\xba\\\\x00@\\\\x90\\\\xbc\\\\x00`$\\\\xbc\\\\x00`\\\\x83<\\\\x00\\\\xe0L\\\\xbd\\\\x00@\\\"\\\\xbd\\\\x00@\\\\x12=\\\\x00\\\\xa0\\\\xb7\\\\xbc\\\\x00`\\\\xce\\\\xbb\\\\x00`\\\\x86=\\\\x00@\\\\xff\\\\xbc\\\\x00\\\\x00\\\\x07<\\\\x00\\\\xc0\\\\x1e<\\\\x00@\\\\xf4<\\\\x00`\\\\xa7<\\\\x00 \\\\x8c\\\\xbc\\\\x00\\\\x80\\\\x04\\\\xbd\\\\x00\\\\xe0\\\\x9a;\\\\x00\\\\xc0\\\\x9a<\\\\x00\\\\xa0\\\\xa9<\\\\x00`\\\\x00\\\\xbc\\\\x00`\\\\x0b\\\\xbd\\\\x00\\\\x00o\\\\xbb\\\\x00\\\\x80\\\\x9c\\\\xbd\\\\x00 u<\\\\x00\\\\xc0\\\\x17<\\\\x00@\\\\x06<\\\\x00\\\\xe0\\\\x11\\\\xbd\\\\x00\\\\x00\\\\x99\\\\xbc\\\\x00\\\\xa0\\\\xa7<\\\\x00\\\\x00\\\\x95=\\\\x00\\\\x80\\\\x85=\\\\x00\\\\xe0\\\\x12=\\\\x00\\\\xa09=\\\\x00@,=\\\\x00`\\\\xbd;\\\\x00\\\\xc0\\\\x91=\\\\x00`\\\\xb1\\\\xbc\\\\x00@\\\\x88<\\\\x00\\\\x00\\\\xaa\\\\xbc\\\\x00 \\\\x0f\\\\xbc\\\\x00\\\\xc0\\\\x05\\\\xbc\\\\x00@=\\\\xbc\\\\x00 \\\\xe6\\\\xbc\\\\x00\\\\xa0{<\\\\x00\\\\xc0\\\\xd5\\\\xbc\\\\x00`\\\\x0b=\\\\x00\\\\x00\\\\xa2<\\\\x00`W\\\\xbd\\\\x00`\\\\xdb\\\\xbc\\\\x00\\\\xa0\\\\x8c<\\\\x00\\\\xa0\\\\xad<\\\\x00\\\\x80u\\\\xbd\\\\x00\\\\x00o\\\\xba\\\\x00\\\\xa0*\\\\xbd\\\\x00\\\\xe0\\\\xa9<\\\\x00@\\\\x95<\\\\x00\\\\xa0S\\\\xbd\\\\x00\\\\xa0\\\\xb0<\\\\x00`B\\\\xbd\\\\x00`\\\\x84;\\\\x00\\\\x00\\\\xcb\\\\xbc\\\\x00\\\\xe0\\\\xaa<\\\\x00\\\\x80I\\\\xbc\\\\x00\\\\xc0\\\\x16=\\\\x00 u\\\\xbc\\\\x00`\\\\x91;\\\\x00@P\\\\xbd\\\\x00\\\\xe0M\\\\xbc\\\\x00@\\\\xa7<\\\\x00`\\\\x80:\\\\x00\\\\xc0\\\\xa7<\\\\x00\\\\xa0\\\\x18\\\\xbd\\\\x00\\\\xa0l<\\\\x00@\\\\xc2<\\\\x00\\\\xc0r=\\\\x00\\\\xe0\\\\xfc\\\\xb9\\\\x00\\\\xc09\\\\xbd\\\\x00\\\\x80L\\\\xbd\\\\x00\\\\xe0\\\\x92=\\\\x00\\\\x00\\\\x9d\\\\xbd\\\\x00@U\\\\xbd\\\\x00 J;\\\\x00\\\\x804\\\\xbc\\\\x00\\\\xa0\\\\xfc\\\\xbb\\\\x00 \\\\xc5;\\\\x00@\\\\xd7\\\\xbb\\\\x00\\\\xe0_<\\\\x00 3;\\\\x00\\\\xe0W<\\\\x00\\\\xe0\\\\n=\\\\x00\\\\xc0\\\\x9e\\\\xbb\\\\x00 \\\\xb4\\\\xbc\\\\x00\\\\x80\\\\x8c;\\\\x00\\\\x80\\\\xff;\\\\x00@\\\\xfb;\\\\x00\\\\xa0\\\\xc4\\\\xba\\\\x00\\\\xc0\\\\x0b<\\\\x00\\\\xe0\\\\xa8;\\\\x00\\\\x80!=\\\\x00\\\\xa0f=\\\\x00\\\\xa0o\\\\xba\\\\x00\\\\xe0\\\\xa6<\\\\x00@\\\\xa2=\\\\x00\\\\x80\\\\xb3<\\\\x00\\\\xe0\\\\x85<\\\\x00`\\\\xac\\\\xbc\\\\x00`-<\\\\x00\\\\x00\\\\x06\\\\xbd\\\\x00`\\\\x02\\\\xbd\\\\x00\\\\xa0\\\\xb7\\\\xbc\\\\x00\\\\xc0\\\\xff<\\\\x00\\\\xe0;=\\\\x00\\\\x808<\\\\x00\\\\x00\\\\x08<\\\\x00 \\\\xad<\\\\x00\\\\xe0\\\\x92=\\\\x00`\\\\x10<\\\\x00\\\\x80\\\\x1b\\\\xbb\\\\x00\\\\xa0\\\\xed;\\\\x00\\\\xa0\\\\xc2<\\\\x00@\\\\x85\\\\xbc\\\\x00@\\\\x19=\\\\x00\\\\x00\\\\xf7<\\\\x00\\\\xa0\\\\x03=\\\\x00 V\\\\xbd\\\\x00\\\\xc0\\\\x10=\\\\x00\\\\xa0T\\\\xbc\\\\x00\\\\x00t=\\\\x00\\\\xe02;\\\\x00\\\\xc0\\\\x81<\\\\x00@|\\\\xbd\\\\x00\\\\xa0\\\\x85=\\\\x00 \\\\xc6\\\\xbc\\\\x00\\\\xa0\\\\x10\\\\xba\\\\x00\\\\xa0\\\\x8e\\\\xbd\\\\x00\\\\x80I=\\\\x00`8=\\\\x00@?<\\\\x00 \\\\x9b\\\\xbc\\\\x00`\\\\x0e\\\\xbd\\\\x00\\\\x00\\\\x9d<\\\\x00\\\\xa06\\\\xbd\\\\x00@M\\\\xbd\\\\x00\\\\x00\\\\xf0<\\\\x00 O<\\\\x00 \\\\r\\\\xbd\\\\x00@\\\\xad;\\\\x00`\\\\x06<\\\\x00\\\\xa0\\\\xff\\\\xbb\\\\x00\\\\xa0\\\\xc19\\\\x00`V;\\\\x00\\\\x80R=\\\\x00\\\\xe0L<\\\\x00\\\\xa0\\\\xb9<\\\\x00\\\\xa0\\\\x97\\\\xbc\\\\x00 \\\\x8b\\\\xbb\\\\x00`<=\\\\x00\\\\x80\\\\x83<\\\\x00`f<\\\\x00\\\\xa0\\\\r\\\\xbc\\\\x00\\\\xa0/\\\\xbd\\\\x00\\\\x80\\\\x06\\\\xbc\\\\x00\\\\x80\\\\xa3=\\\\x00\\\\x80\\\\x08=\\\\x00\\\\xc0\\\\xaf\\\\xbc\\\\x00\\\\xc0\\\\x84;\\\\x00@o=\\\\x00\\\\xa0\\\\x00=\\\\x00\\\\xc0\\\\xab\\\\xbc\\\\x00\\\\x00$\\\\xbc\\\\x00\\\\xe0\\\\xf7;\\\\x00\\\\x00\\\\x81;\\\\x00@\\\\x94<\\\\x00\\\\x80|;\\\\x00`\\\\xaf\\\\xbb\\\\x00\\\\x00\\\\xe6\\\\xba\\\\x00\\\\xe0\\\\xf8\\\\xbc\\\\x00\\\\xa0C\\\\xbc\\\\x00\\\\xc08<\\\\x00\\\\x80\\\\xdc\\\\xbc\\\\x00\\\\xe0\\\\x18=\\\\x00`\\\\x10\\\\xbc\\\\x00\\\\x00\\\\xf3;\\\\x00`\\\\xa1\\\\xbb\\\\x00\\\\x00\\\\xb3:\\\\x00\\\\xc0\\\\x80\\\\xbb\\\\x00 I\\\\xbd\\\\x00\\\\x00\\\\x85<\\\\x00\\\\xa0::\\\\x00\\\\xc0>\\\\xbd\\\\x00 [<\\\\x00\\\\x808;\\\\x00\\\\xc0\\\\x8c\\\\xbd\\\\x00\\\\xc0\\\\xe8;\\\\x00`\\\\xd9\\\\xbc\\\\x00\\\\xc0\\\\xef\\\\xb9\\\\x00\\\\xa0\\\\xa1<\\\\x00\\\\xa0\\\\xcb:\\\\x00\\\\x80\\\\x16\\\\xbc\\\\x00\\\\x80\\\\x9c;\\\\x00@?<\\\\x00\\\\x80\\\\xe3\\\\xba\\\\x00@\\\\x03<\\\\x00\\\\xc0\\\\xc4<\\\\x00`\\\\x96:\\\\x00@]\\\\xbd\\\\x00 \\\\x9f\\\\xbc\\\\x00\\\\xe0f\\\\xbd\\\\x00 \\\\x14\\\\xbd\\\\x00\\\\x80\\\\\\\\\\\\xbc\\\\x00\\\\x00\\\\xc0<\\\\x00\\\\xa0\\\\x89\\\\xbd\\\\x00\\\\xe0\\\\x11=\\\\x00\\\\x80;\\\\xbb\\\\x00\\\\xc0\\\\xd4\\\\xbb\\\\x00\\\\x80\\\\x96<\\\\x00\\\\xc0b\\\\xbb\\\\x00 \\\\x1a\\\\xbc\\\\x00\\\\xa0\\\\x00\\\\xbc\\\\x00\\\\xa0\\\\x859\\\\x00\\\\x80)\\\\xbb\\\\x00\\\\xa0\\\\xb1<\\\\x00\\\\xc0\\\\xf5;\\\\x00\\\\xc0\\\\xed\\\\xbc\\\\x00 \\\\x05\\\\xbd\\\\x00@z\\\\xbd\\\\x00\\\\xc0\\\\xfb\\\\xbc\\\\x00@\\\\xd8\\\\xbc\\\\x00\\\\x00.\\\\xbd\\\\x00\\\\x00/;\\\\x00@-=\\\\x00\\\\xa0\\\\x07<\\\\x00\\\\xe0}\\\\xbd\\\\x00\\\\x80.=\\\\x00\\\\xa0o\\\\xbd\\\\x00\\\\x00\\\\x0e\\\\xbb\\\\x00\\\\x00\\\\xae<\\\\x00\\\\x00=\\\\xbd\\\\x00\\\\x00\\\\xcb<\\\\x00\\\\xa0\\\\xc4\\\\xbc\\\\x00\\\\xc0\\\\x85\\\\xbd\\\\x00\\\\x00\\\\xc8\\\\xbb\\\\x00@v\\\\xbb\\\\x00@M\\\\xbd\\\\x00\\\\xe0\\\\t\\\\xbd\\\\x00\\\\x00\\\\xc2\\\\xbc\\\\x00\\\\xc0\\\\xc7<\\\\x00\\\\x80A<\\\\x00 Z<\\\\x00\\\\xe0\\\\xcf;\\\\x00\\\\x80\\\\x03=\\\\x00\\\\x00\\\\xae;\\\\x00\\\\xe0\\\\x9d\\\\xbc\\\\x00\\\\xe0\\\\xbc\\\\xbc\\\\x00\\\\x00\\\\x9d<\\\\x00\\\\x80\\\\xa5<\\\\x00\\\\xc0\\\\x87\\\\xbb\\\\x00\\\\xa0\\\\x87\\\\xbc\\\\x00\\\\x00+\\\\xbc\\\\x00@\\\\x82\\\\xb9\\\\x00@\\\\x13=\\\\x00 \\\\xd9\\\\xbb\\\\x00\\\\xc0m\\\\xbd\\\\x00`\\\\xd0<\\\\x00@\\\\xbe\\\\xbd\\\\x00\\\\x80,<\\\\x00\\\\xe0\\\\x0e;\\\\x00\\\\xc0!\\\\xbc\\\\x00\\\\xa0\\\\xc0\\\\xbb\\\\x00`b\\\\xbc\\\\x00\\\\xa0\\\\xa7\\\\xbc\\\\x00\\\\x00\\\\x8b\\\\xbd\\\\x00@\\\\x87\\\\xbc\\\\x00\\\\xc0\\\\xe2\\\\xbc\\\\x00 %<\\\\x00\\\\xc0\\\\xfd<\\\\x00 \\\\x12\\\\xbd\\\\x00\\\\x80\\\\xee<\\\\x00\\\\xc0\\\\xae\\\\xbc\\\\x00\\\\x80a<\\\\x00\\\\xe0\\\\x07<\\\\x00@\\\\x94\\\\xbc\\\\x00\\\\xa0\\\\x99\\\\xbc\\\\x00\\\\xa07\\\\xbc\\\\x00`\\\\x98<\\\\x00`\\\\xe2;\\\\x00\\\\x80\\\\xd0<\\\\x00\\\\xc0\\\\x8f\\\\xbd\\\\x00@}<\\\\x00\\\\xe0\\\\xbc<\\\\x00\\\\xa0\\\\xc7\\\\xbc\\\\x00`{;\\\\x00\\\\xe0l\\\\xbc\\\\x00\\\\x00\\\\x8f<\\\\x00\\\\xe0\\\\x9e\\\\xbc\\\\x00\\\\xc0\\\\x87<\\\\x00\\\\x00;\\\\xbc\\\\x00\\\\xe0\\\\xf3\\\\xbb\\\\x00@\\\\xe0\\\\xb9\\\\x00\\\\xa0!\\\\xbd\\\\x00\\\\x80\\\\xe3\\\\xbc\\\\x00\\\\xc0\\\\x82<\\\\x00\\\\xc0\\\\xdc\\\\xbc\\\\x00\\\\x00\\\\xff<\\\\x00\\\\x807\\\\xbc\\\\x00`\\\\xf8\\\\xba\\\\x00\\\\xe0y<\\\\x00\\\\xe0\\\\x81<\\\\x00\\\\x80\\\\xad<\\\\x00@\\\\xc3<\\\\x00\\\\xe0\\\\x92\\\\xbc\\\\x00@%;\\\\x00@\\\\x1a=\\\\x00\\\\x00\\\\xc7<\\\\x00\\\\x80u\\\\xbc\\\\x00\\\\xc0\\\\xf1:\\\\x00@\\\\xab\\\\xb9\\\\x00\\\\xa0\\\\x95<\\\\x00\\\\xc0\\\\xe4;\\\\x00\\\\xc0O;\\\\x00 \\\\xcb\\\\xbc\\\\x00\\\\xe0\\\\x00\\\\xbd\\\\x00\\\\x80\\\\xe2\\\\xbb\\\\x00@\\\\x02=\\\\x00 \\\\x19\\\\xbc\\\\x00@\\\\xf8\\\\xbc\\\\x00@\\\\x85;\\\\x00\\\\xe0\\\\xb9\\\\xbc\\\\x00\\\\xc0\\\\x16\\\\xbd\\\\x00\\\\xc0X\\\\xbc\\\\x00\\\\xa0\\\\x01\\\\xbd\\\\x00\\\\xa0\\\\x99\\\\xba\\\\x00\\\\xc0\\\\xa4=\\\\x00\\\\x00\\\\xfa\\\\xbc\\\\x00\\\\x00O\\\\xbc\\\\x00\\\\xc0\\\\x8b\\\\xbb\\\\x00\\\\xe0\\\\x8e\\\\xbd\\\\x00\\\\xc0\\\\xe9<\\\\x00`\\\\xca<\\\\x00\\\\x80\\\\x03<\\\\x00\\\\x80\\\\xe8\\\\xbb\\\\x00\\\\x80\\\\xbb<\\\\x00 \\\\x8d<\\\\x00\\\\xc0\\\\x8c<\\\\x00 L\\\\xbd\\\\x00\\\\x80\\\\x9f\\\\xbc\\\\x00\\\\x80v\\\\xbd\\\\x00\\\\x00\\\\xf7<\\\\x00\\\\x80\\\\x89\\\\xbd\\\\x00\\\\x80\\\\xaa\\\\xbb\\\\x00`\\\\xec\\\\xbc\\\\x00@\\\\xf9;\\\\x00\\\\xa0\\\\xfc\\\\xbb\\\\x00\\\\xa0\\\\xa7\\\\xbc\\\\x00 \\\\xce<\\\\x00`\\\\xff\\\\xbc\\\\x00`\\\\xda<\\\\x00\\\\x80N\\\\xbd\\\\x00\\\\xa0\\\\x19=\\\\x00 ^\\\\xbd\\\\x00\\\\xe0\\\\xdb\\\\xbc\\\\x00\\\\xa0\\\\xf2\\\\xbc\\\\x00`\\\\xbe\\\\xbb\\\\x00`\\\\xd9;\\\\x00@\\\\xc2\\\\xbc\\\\x00\\\\xa0{\\\\xbd\\\\x00\\\\xc0#\\\\xbb\\\\x00 \\\\xa4:\\\\x00\\\\xc0\\\\x03\\\\xbd\\\\x00`\\\\xe8<\\\\x00\\\\xa0\\\\xad\\\\xbc\\\\x00`E<\\\\x00\\\\x00\\\\x1e<\\\\x00\\\\x80\\\\x85;\\\\x00`=<\\\\x00\\\\x80\\\\x8b<\\\\x00\\\\x80\\\\x13\\\\xbc\\\\x00 \\\\xab\\\\xbc\\\\x00\\\\xc0-\\\\xbd\\\\x00\\\\xe0A\\\\xbb\\\\x00\\\\xe06\\\\xbd\\\\x00\\\\xc0\\\\xa5<\\\\x00\\\\x00$\\\\xbd\\\\x00\\\\x00\\\\xc5;\\\\x00 \\\\xec\\\\xbc\\\\x00 \\\\xb8\\\\xbb\\\\x00\\\\xa0F\\\\xbc\\\\x00\\\\x00\\\\xc4<\\\\x00@\\\\'\\\\xbd\\\\x00 \\\\xb9<\\\\x00\\\\xc0\\\\xf5<\\\\x00\\\\xc0\\\\xaf\\\\xbc\\\\x00\\\\xe0\\\\x11\\\\xbd\\\\x00`<=\\\\x00\\\\xc0\\\\xb7\\\\xbc\\\\x00\\\\x00[\\\\xbd\\\\x00@\\\\x12=\\\\x00\\\\x00v<\\\\x00@\\\\x0f=\\\\x00\\\\x00-=\\\\x00\\\\x80\\\\x19\\\\xbd\\\\x00\\\\xe0\\\\x1f=\\\\x00\\\\x80\\\\x02\\\\xbc\\\\x00\\\\x00\\\\xc9\\\\xbc\\\\x00\\\\xa0\\\\xcc\\\\xbc\\\\x00\\\\xe0m\\\\xbc\\\\x00\\\\x00@\\\\xbb\\\\x00 N=\\\\x00`\\\\x83<\\\\x00`\\\\x0e<\\\\x00`\\\\xac<\\\\x00@\\\\xfc<\\\\x00\\\\xe0\\\\x08;\\\\x00\\\\x80\\\\xab=\\\\x00`\\\\xae\\\\xbd\\\\x00`\\\\xa2=\\\\x00\\\\x00\\\\x80\\\\xbc\\\\x00\\\\xc0\\\\xc7\\\\xbc\\\\x00\\\\xe0\\\\xdb\\\\xbb\\\\x00`D\\\\xbd\\\\x00\\\\xa0?\\\\xbd\\\\x00 U=\\\\x00\\\\x80@=\\\\x00`k\\\\xbc\\\\x00\\\\x80\\\\xd8\\\\xbc\\\\x00\\\\xc0\\\\x8d<\\\\x00\\\\xc0\\\\x9f\\\\xbc\\\\x00\\\\xe0E<\\\\x00\\\\xa0\\\\xa8<\\\\x00\\\\xc0<\\\\xbc\\\\x00\\\\xc0L<\\\\x00\\\\xe0\\\\xdb<\\\\x00 \\\\xa2\\\\xbb\\\\x00@\\\\x80\\\\xbc\\\\x00 e\\\\xba\\\\x00\\\\x000\\\\xbb\\\\x00 \\\\xb7\\\\xbc\\\\x00`\\\\x19\\\\xbc\\\\x00\\\\xc0@=\\\\x00`,\\\\xbd\\\\x00\\\\xc0\\\\xa6<\\\\x00\\\\xe0\\\\x8a\\\\xbd\\\\x00\\\\x00\\\\x1e\\\\xbd\\\\x00\\\\x80\\\\xef\\\\xba\\\\x00`$\\\\xbc\\\\x00@O:\\\\x00\\\\xe0\\\\xbd\\\\xbc\\\\x00\\\\x80\\\\xdc<\\\\x00\\\\xc02<\\\\x00 ?<\\\\x00\\\\xc0\\\\x15\\\\xbd\\\\x00@\\\\xc4\\\\xbb\\\\x00 \\\\xba<\\\\x00\\\\xa0\\\\x04\\\\xbc\\\\x00\\\\xe0\\\\x8e\\\\xbc\\\\x00\\\\xe0\\\\xb1\\\\xbc\\\\x00`5=\\\\x00\\\\x80\\\\xd0\\\\xbb\\\\x00 _=\\\\x00\\\\x80\\\\x18<\\\\x00`#\\\\xbb\\\\x00\\\\xe0u\\\\xbd\\\\x00\\\\x80(=\\\\x00\\\\x00\\\\xd7\\\\xbd\\\\x00@p\\\\xbd\\\\x00\\\\xe0\\\\xa4\\\\xbc\\\\x00\\\\x00\\\\xb6\\\\xbc\\\\x00@\\\\xd3<\\\\x00 \\\\xf5<\\\\x00`\\\\xf5\\\\xbc\\\\x00\\\\xc0i\\\\xbc\\\\x00 \\\\xf3\\\\xba\\\\x00`\\\\xe4;\\\\x00\\\\x00\\\\xe4\\\\xbc\\\\x00\\\\x80\\\\xd3\\\\xbc\\\\x00\\\\xc0\\\\xe2\\\\xbc\\\\x00\\\\x00\\\\xcc<\\\\x00 )=\\\\x00@\\\\x15\\\\xbd\\\\x00\\\\x80=\\\\xbc\\\\x00 ;\\\\xbd\\\\x00\\\\xe0\\\\xac<\\\\x00\\\\x00\\\\xad<\\\\x00@\\\\xd8\\\\xbc\\\\x00`\\\\x8f\\\\xbd\\\\x00@\\\\x13\\\\xbd\\\\x00\\\\xc02\\\\xbd\\\\x00\\\\xe0{\\\\xbc\\\\x00 \\\\xe6;\\\\x00\\\\xe0\\\\xed\\\\xbc\\\\x00\\\\x00%=\\\\x00\\\\xc0\\\\x94\\\\xbd\\\\x00\\\\x00\\\\xe7\\\\xbc\\\\x00\\\\xc0\\\\x15\\\\xbd\\\\x00@{\\\\xbc\\\\x00\\\\xc0M\\\\xba\\\\x00@.\\\\xbd\\\\x00\\\\x00\\\\xaf;\\\\x00\\\\xa0\\\\x87<\\\\x00`\\\\xb9<\\\\x00\\\\xe0t=\\\\x00\\\\x00\\\\x08\\\\xbd\\\\x00`T;\\\\x00\\\\x80\\\\xb7<\\\\x00@\\\\xa9\\\\xbc\\\\x00`\\\\x90<\\\\x00\\\\x80h\\\\xbb\\\\x00 @;\\\\x00 \\\\xc8;\\\\x00\\\\xa0x<\\\\x00\\\\x00\\\\x0c<\\\\x00\\\\xc0z\\\\xbc\\\\x00\\\\xa0\\\\x16<\\\\x00@\\\\xb5<\\\\x00`I\\\\xbc\\\\x00@\\\\xd1\\\\xbc\\\\x00@\\\\'\\\\xbb\\\\x00\\\\x00\\\\x93;\\\\x00 \\\\xcf<\\\\x00 \\\\x9e\\\\xbc\\\\x00`\\\\x93\\\\xbb\\\\x00\\\\x00\\\\x88\\\\xbb\\\\x00@\\\\xe2\\\\xbb\\\\x00`x=\\\\x00\\\\xe0\\\\x1b\\\\xbd\\\\x00\\\\x80\\\\x87<\\\\x00 \\\\x9d<\\\\x00\\\\xe0:=\\\\x00\\\\xe0\\\\x17\\\\xbd\\\\x00`\\\\xb1\\\\xbc\\\\x00\\\\xe0\\\\r<\\\\x00\\\\xe0\\\\xeb<\\\\x00\\\\xe0\\\\x18=\\\\x00\\\\x80\\\\xa8<\\\\x00\\\\x00\\\\xcb\\\\xbb\\\\x00\\\\x80w<\\\\x00\\\\x80,\\\\xbc\\\\x00`\\\\x94<\\\\x00\\\\xa0\\\\x8a\\\\xbb\\\\x00\\\\xa0S\\\\xbc\\\\x00@\\\\xf9;\\\\x00`\\\\x85\\\\xbb\\\\x00\\\\xa0\\\\xce\\\\xbc\\\\x00@\\\\xbf<\\\\x00\\\\xa0\\\\xf0\\\\xbc\\\\x00@a\\\\xbb\\\\x00@h<\\\\x00\\\\x00\\\\x8e\\\\xba\\\\x00 \\\\x8a\\\\xbc\\\\x00`\\\\n<\\\\x00 \\\\xf6\\\\xbc\\\\x00 \\\\xaa<\\\\x00\\\\xa0\\\\xb8\\\\xbc\\\\x00\\\\xa0\\\\xa7<\\\\x00\\\\xa0 \\\\xbd\\\\x00\\\\xa0(\\\\xbb\\\\x00\\\\xc0\\\\xea<\\\\x00\\\\x00\\\\xd6=\\\\x00\\\\xe0\\\\x03\\\\xbd\\\\x00\\\\x00\\\\xdf=\\\\x00@}\\\\xbb\\\\x00`\\\\xc6\\\\xbc\\\\x00\\\\xc0\\\\x92\\\\xbc\\\\x00\\\\xc0g\\\\xbd\\\\x00\\\\xc0\\\\xc5<\\\\x00 }\\\\xbc\\\\x00\\\\xa0\\\\x90;\\\\x00\\\\x80\\\\x91\\\\xbc\\\\x00@\\\\x0f=\\\\x00\\\\xc0F\\\\xbc\\\\x00\\\\xa0I\\\\xbc\\\\x00\\\\xc0z=\\\\x00@\\\\x00=\\\\x00`\\\\xaf<\\\\x00 \\\\x11\\\\xbd\\\\x00@\\\\x9a\\\\xbc\\\\x00\\\\x00\\\\xe5<\\\\x00\\\\x800=\\\\x00@\\\\x8e\\\\xbc\\\\x00 \\\\xcb\\\\xbc\\\\x00 \\\\xd5<\\\\x00\\\\xe0*:\\\\x00\\\\x00\\\\x9c=\\\\x00\\\\x00S=\\\\x00\\\\x00\\\\x06=\\\\x00\\\\x00\\\\x03\\\\xbd\\\\x00\\\\x00\\\\x0c\\\\xbd\\\\x00\\\\x80P\\\\xbd\\\\x00\\\\xe0\\\\xb5;\\\\x00\\\\xc0P:\\\\x00\\\\x00\\\\x1c=\\\\x00\\\\x00\\\\x9d\\\\xbc\\\\x00\\\\xe0\\\\xa8\\\\xbc\\\\x00\\\\xa0\\\\xf5\\\\xbc\\\\x00@\\\\x8f<\\\\x00\\\\xc0\\\\x13=\\\\x00\\\\x00\\\\xd3\\\\xbc\\\\x00\\\\xc0\\\\x84:\\\\x00`\\\\x08=\\\\x00@\\\\t\\\\xbd\\\\x00\\\\x00\\\\xfb\\\\xbb\\\\x00\\\\x80\\\\xfb\\\\xbc\\\\x00\\\\x80\\\\xf7<\\\\x00\\\\x00\\\\xa7;\\\\x00\\\\xc0\\\\xa6\\\\xb9\\\\x00\\\\xc0%=\\\\x00\\\\xa0\\\\x98<\\\\x00\\\\xa0\\\\x85\\\\xbb\\\\x00\\\\xc09=\\\\x00\\\\xa0*\\\\xbc\\\\x00 \\\\xa0\\\\xbd\\\\x00\\\\xc06<\\\\x00\\\\x80\\\\xb6;\\\\x00\\\\x00\\\\x9f\\\\xbd\\\\x00 ^\\\\xbc\\\\x00\\\\xe0\\\\x06\\\\xbd\\\\x00\\\\xa0\\\\x04=\\\\x00 \\\\x1a<\\\\x00\\\\xc0\\\\xa7\\\\xbc\\\\x00\\\\x00}\\\\xbc\\\\x00\\\\xe0\\\\xd7;\\\\x00\\\\xc0\\\\x97<\\\\x00\\\\xc0\\\\x8b=\\\\x00\\\\xe0\\\\x17\\\\xbc\\\\x00@\\\\x0f\\\\xbd\\\\x00 \\\\xcd\\\\xbc\\\\x00\\\\x00\\\\xe4\\\\xbc\\\\x00\\\\xe0\\\\xca;\\\\x00 w:\\\\x00`u<\\\\x00\\\\xe0F\\\\xbc\\\\x00`\\\\x96<\\\\x00\\\\x00\\\\x88\\\\xbd\\\\x00\\\\xe0\\\\xfd\\\\xbc\\\\x00@\\\\x86<\\\\x00\\\\x80B=\\\\x00\\\\x80\\\\x86\\\\xbc\\\\x00\\\\xa0\\\\x19=\\\\x00 \\\\xd3\\\\xba\\\\x00 \\\\xce;\\\\x00\\\\x00t\\\\xbd\\\\x00\\\\x80^=\\\\x00@\\\\xc9<\\\\x00\\\\xc0\\\\x97\\\\xbc\\\\x00\\\\xc0\\\\xd4\\\\xbc\\\\x00\\\\x80\\\\xbc<\\\\x00\\\\xc0\\\\x11=\\\\x00\\\\x00M\\\\xbc\\\\x00\\\\xa0\\\\xaf\\\\xbd\\\\x00 \\\\x8a\\\\xbc\\\\x00\\\\xc0\\\\xaf\\\\xbc\\\\x00\\\\x80\\\\x88\\\\xbc\\\\x00\\\\xa0\\\\x92<\\\\x00\\\\x80\\\\xfb<\\\\x00@\\\\x02\\\\xbc\\\\x00`\\\\x07=\\\\x00 \\\\xe3<\\\\x00\\\\xc0\\\\xa2<\\\\x00\\\\x00_=\\\\x00\\\\xc0\\\\x82;\\\\x00@k=\\\\x00@S<\\\\x00\\\\x00(\\\\xbd\\\\x00`-<\\\\x00@\\\\xa0<\\\\x00`\\\\xc1\\\\xbc\\\\x00\\\\xc0\\\\x89<\\\\x00\\\\x00!\\\\xbc\\\\x00\\\\xe0\\\\x8c\\\\xbc\\\\x00\\\\x00\\\\xc9;\\\\x00`\\\\x8f\\\\xbc\\\\x00\\\\x00\\\\xf8\\\\xbc\\\\x00\\\\xe0\\\\xff;\\\\x00\\\\x80\\\\xa6<\\\\x00@\\\\x9c\\\\xbb\\\\x00 G;\\\\x00`\\\\x80<\\\\x00\\\\x00\\\\xb4<\\\\x00`\\\\xbc<\\\\x00\\\\xc0\\\\x01<\\\\x00\\\\xa0{\\\\xbd\\\\x00 \\\\xc3<\\\\x00`r\\\\xbc\\\\x00\\\\xe0\\\\xc6;\\\\x00\\\\xc0\\\\x07\\\\xbd\\\\x00`\\\\x1a\\\\xbd\\\\x00 \\\\x0e=\\\\x00\\\\x80@=\\\\x00\\\\x80\\\\xc2<\\\\x00\\\\xa0_\\\\xbc\\\\x00\\\\x00\\\\x8f\\\\xbc\\\\x00@c=\\\\x00@$\\\\xbd\\\\x00\\\\xc0\\\\xa0\\\\xbc\\\\x00`\\\\x05\\\\xbc\\\\x00\\\\x00\\\\x84\\\\xbb\\\\x00`\\\\xe8<\\\\x00 \\\\xeb;\\\\x00\\\\xc0(\\\\xbb\\\\x00\\\\xa0\\\\xd6<\\\\x00\\\\xa0%=\\\\x00\\\\xc0\\\\x18\\\\xbb\\\\x00\\\\xa0C\\\\xbc\\\\x00\\\\xe0\\\\x01\\\\xbd\\\\x00@\\\\x0c=\\\\x00\\\\xe0\\\\x8d\\\\xbc\\\\x00\\\\xc0\\\\x82\\\\xbc\\\\x00 o<\\\\x00\\\\x00\\\\xda\\\\xbc\\\\x00\\\\x00\\\\xc2<\\\\x00\\\\x00\\\\xa3\\\\xbd\\\\x00\\\\xc0H=\\\\x00`N=\\\\x00`\\\\xb1\\\\xbc\\\\x00\\\\xe0\\\\xbc:\\\\x00@\\\\xf4<\\\\x00\\\\xa0\\\\xb8<\\\\x00\\\\x80\\\\xe4\\\\xbb\\\\x00 \\\\x91<\\\\x00`\\\\x03<\\\\x00\\\\xa0t<\\\\x00 \\\\xb1<\\\\x00\\\\xe0c\\\\xbd\\\\x00\\\\xe0R\\\\xbd\\\\x00\\\\xc0\\\\xd3\\\\xbc\\\\x00 \\\\x98=\\\\x00\\\\x00D=\\\\x00`_\\\\xbd\\\\x00\\\\xc0N\\\\xbd\\\\x00 (\\\\xbc\\\\x00\\\\x00\\\\x84=\\\\x00@\\\\x8a\\\\xbc\\\\x00\\\\xa0\\\\xec<\\\\x00\\\\xa0\\\\x8e;\\\\x00 \\\\x00\\\\xbd\\\\x00 i\\\\xbc\\\\x00\\\\xa0\\\\xbc<\\\\x00 \\\\x8a\\\\xbc\\\\x00\\\\xa0\\\\x03=\\\\x00\\\\x80\\\\xe6\\\\xbc\\\\x00\\\\x80%\\\\xbd\\\\x00\\\\x80\\\\xe2<\\\\x00\\\\x00W\\\\xbc\\\\x00\\\\x00\\\\x94<\\\\x00\\\\xe0\\\\xbe\\\\xbc\\\\x00\\\\xe0\\\\xec<\\\\x00 \\\\xc4\\\\xbc\\\\x00\\\\xc0\\\\x00\\\\xbd\\\\x00\\\\xc0\\\\x82\\\\xbc\\\\x00\\\\xa0V\\\\xbd\\\\x00\\\\xc0e\\\\xbc\\\\x00@\\\\x81\\\\xbc\\\\x00\\\\xe0p<\\\\x00\\\\xe0\\\\xca<\\\\x00\\\\xe0\\\\x13=\\\\x00\\\\x80\\\\xab<\\\\x00\\\\xe0.=\\\\x00@\\\\xc7\\\\xbc\\\\x00@\\\\x97\\\\xbb\\\\x00@\\\\x05=\\\\x00\\\\x80S<\\\\x00\\\\xe0\\\\x98<\\\\x00@\\\\x11\\\\xbc\\\\x00\\\\xa0\\\\x95\\\\xbc\\\\x00 O\\\\xbd\\\\x00\\\\xa0\\\\x96=\\\\x00@#\\\\xbd\\\\x00`\\\\x85\\\\xbc\\\\x00@b\\\\xbd\\\\x00`\\\\xf8\\\\xbc\\\\x00\\\\xc0\\\\x17<\\\\x00\\\\xa0\\\\xd8\\\\xbc\\\\x00\\\\xc0><\\\\x00\\\\xe0\\\\x99<\\\\x00\\\\xe0a\\\\xbd\\\\x00\\\\xa0\\\\x12\\\\xbd\\\\x00\\\\xa0\\\\xb8=\\\\x00\\\\xc0\\\\\\\\;\\\\x00\\\\xe0\\\\xfe<\\\\x00`?=\\\\x00\\\\xc0\\\\x1e\\\\xbd\\\\x00`\\\\xef\\\\xbc\\\\x00 \\\\xab<\\\\x00\\\\xc0K=\\\\x00\\\\x80;=\\\\x00\\\\xe0\\\\x16=\\\\x00\\\\xc0l:\\\\x00\\\\xa0\\\\x80\\\\xbb\\\\x00\\\\xe0\\\\xa2\\\\xba\\\\x00\\\\xc0?\\\\xbd\\\\x00\\\\xe0\\\\xdf;\\\\x00`.=\\\\x00\\\\x00\\\\xf7\\\\xbc\\\\x00@\\\\x90\\\\xbd\\\\x00@\\\\xa3\\\\xbc\\\\x00\\\\xc0\\\\x1e=\\\\x00\\\\x80&=\\\\x00@\\\\x87\\\\xbb\\\\x00\\\\x80(\\\\xbc\\\\x00\\\\x80\\\\xce\\\\xbc\\\\x00@\\\\x9b<\\\\x00\\\\xc0\\\\xab\\\\xbc\\\\x00@3=\\\\x00\\\\xc0\\\\xdb;\\\\x00\\\\x00\\\\x10\\\\xbc\\\\x00@4\\\\xbc\\\\x00\\\\xe0\\\\x0c\\\\xba\\\\x00`\\\\x1c<\\\\x00`\\\\x05;\\\\x00\\\\xa0\\\\xea\\\\xbc\\\\x00@\\\\x8b<\\\\x00`\\\\xa3\\\\xbc\\\\x00@\\\\x9b=\\\\x00\\\\xc0\\\\x01\\\\xbc\\\\x00\\\\x80\\\\x1f\\\\xbd\\\\x00\\\\xe0E\\\\xbb\\\\x00\\\\x80\\\\x86\\\\xbc\\\\x00\\\\xe0l\\\\xb9\\\\x00\\\\x00\\\\xef\\\\xbc\\\\x00\\\\x80\\\\x11=\\\\x00\\\\xc0\\\\xd2<\\\\x00\\\\x80\\\\x88=\\\\x00`\\\\xdc\\\\xbb\\\\x00@\\\\x87<\\\\x00\\\\xe0\\\\x82;\\\\x00\\\\xe0\\\\xbf;\\\\x00\\\\x80\\\\x92<\\\\x00\\\\xe0\\\\x02<\\\\x00\\\\x00\\\\xdb\\\\xbb\\\\x00\\\\xc0A\\\\xbc\\\\x00\\\\xc0L\\\\xbd\\\\x00\\\\xc0\\\\xff<\\\\x00`\\\\x1d\\\\xbc\\\\x00\\\\xc0\\\\r<\\\\x00\\\\xc0\\\\xcf<\\\\x00\\\\xe0r\\\\xbb\\\\x00`\\\\x1e;\\\\x00\\\\x80x<\\\\x00`d\\\\xbc\\\\x00\\\\xc0\\\\x9f\\\\xbb\\\\x00\\\\x00%\\\\xbb\\\\x00\\\\xc0\\\\x88;\\\\x00\\\\x00\\\\xee<\\\\x00\\\\xc0\\\\x0e=\\\\x00\\\\xc0\\\\xb9\\\\xbc\\\\x00\\\\xa0\\\\x1c=\\\\x00 \\\\xbb\\\\xbc\\\\x00\\\\x80\\\\xf1<\\\\x00 \\\\xcc\\\\xbc\\\\x00\\\\xa0\\\\xd2<\\\\x00@\\\\x14\\\\xbd\\\\x00\\\\x80(=\\\\x00@\\\\xec\\\\xbc\\\\x00 \\\\x9a\\\\xbc\\\\x00`&<\\\\x00`\\\\xc0<\\\\x00\\\\x80\\\\x14\\\\xbc\\\\x00@\\\\xd1<\\\\x00\\\\xa0\\\\x05;\\\\x00\\\\xc0\\\\xce\\\\xbd\\\\x00\\\\xe0+=\\\\x00\\\\x00\\\\x8a=\\\\x00\\\\xa0+<\\\\x00@\\\\x16=\\\\x00@\\\\xcb;\\\\x00 .\\\\xbd\\\\x00\\\\xc0\\\\x9c\\\\xbd\\\\x00\\\\x80\\\\x9f\\\\xbc\\\\x00\\\\x00g=\\\\x00\\\\x00*\\\\xbd\\\\x00\\\\x00\\\\xd7\\\\xbc\\\\x00\\\\xc0_\\\\xbd\\\\x00`\\\\x00=\\\\x00\\\\xc0\\\\x00<\\\\x00@\\\\xf0;\\\\x00`\\\\x9f\\\\xbd\\\\x00\\\\xc0R\\\\xbc\\\\x00\\\\x80\\\\xe4<\\\\x00\\\\xc0Y\\\\xbd\\\\x00\\\\x00Q\\\\xb9\\\\x00\\\\xc0\\\\xef\\\\xbc\\\\x00@T\\\\xbd\\\\x00@Z<\\\\x00 \\\\xa6\\\\xbb\\\\x00\\\\xa0\\\\x0e\\\\xbc\\\\x00\\\\xa0\\\\xda:\\\\x00\\\\xe0\\\\x1c\\\\xbd\\\\x00 \\\\xae;\\\\x00`\\\\xac\\\\xbc\\\\x00\\\\x00d\\\\xbc'\",\n          \"b'\\\\'\\\\x00\\\\x00\\\\xa0\\\\xfb<\\\\x00`\\\\xc3<\\\\x00\\\\x80\\\\x08\\\\xbd\\\\x00\\\\x80\\\\xf0\\\\xbc\\\\x00\\\\xc0\\\\xe5;\\\\x00`\\\\xe2\\\\xbc\\\\x00\\\\xa0\\\\x1b;\\\\x00\\\\xe0\\\\x9c\\\\xbc\\\\x00 t\\\\xbd\\\\x00 9=\\\\x00 \\\\xfd<\\\\x00\\\\x80\\\\xc3<\\\\x00\\\\xe0\\\\xe6;\\\\x00`\\\\xe8\\\\xbc\\\\x00\\\\x80\\\\xa5<\\\\x00\\\\xa0\\\\xf4;\\\\x00\\\\xc0l;\\\\x00\\\\xe0\\\\xe8;\\\\x00@\\\"<\\\\x00 \\\\x85\\\\xbc\\\\x00\\\\x00e<\\\\x00\\\\xc0V;\\\\x00 \\\\xba\\\\xbc\\\\x00\\\\xa0\\\\xa5\\\\xbd\\\\x00\\\\xc0\\\\xfc<\\\\x00 :\\\\xbd\\\\x00\\\\x80\\\\xbc\\\\xbd\\\\x00\\\\x00\\\\xd7<\\\\x00\\\\xc0\\\\xaa\\\\xbb\\\\x00@N;\\\\x00\\\\xc0\\\\xfb\\\\xbb\\\\x00 \\\\x84=\\\\x00 \\\\x0e\\\\xbc\\\\x00\\\\xa0e<\\\\x00\\\\xa0\\\\x80<\\\\x00@\\\\xd8\\\\xbb\\\\x00\\\\x80\\\\x17\\\\xbd\\\\x00\\\\xa0\\\\xbd<\\\\x00\\\\xc0\\\\xee<\\\\x00@\\\\x9d\\\\xbc\\\\x00@8<\\\\x00@\\\\xd0\\\\xbc\\\\x00\\\\xe0\\\\xd5\\\\xbb\\\\x00`\\\\x87\\\\xbc\\\\x00 &\\\\xbd\\\\x00\\\\x00N<\\\\x00\\\\xc0\\\"<\\\\x00\\\\x00\\\\xd89\\\\x00\\\\xe0\\\\x01=\\\\x00\\\\xe0\\\\x90\\\\xbd\\\\x00 \\\\xd7\\\\xbc\\\\x00\\\\xc0\\\\xb1\\\\xbb\\\\x00\\\\xa0\\\\xd4\\\\xbb\\\\x00\\\\x80\\\\xc1\\\\xbc\\\\x00\\\\xe0\\\\xd7\\\\xbc\\\\x00`K\\\\xba\\\\x00\\\\xe0 <\\\\x00\\\\xa0o\\\\xbd\\\\x00\\\\xa0~\\\\xbc\\\\x00\\\\xc0b\\\\xbc\\\\x00\\\\xe0><\\\\x00\\\\x80E<\\\\x00\\\\x00_=\\\\x00\\\\xe0A=\\\\x00\\\\xe0#\\\\xbc\\\\x00 \\\\xd3\\\\xbc\\\\x00\\\\xc0\\\\xf0\\\\xbb\\\\x00`_<\\\\x00\\\\x00\\\\xae\\\\xbb\\\\x00 \\\\x95;\\\\x00\\\\xc0\\\\xc5<\\\\x00\\\\xe0\\\\x9e\\\\xbb\\\\x00\\\\x80\\\\x06<\\\\x00`4\\\\xbd\\\\x00\\\\xa0\\\\xd4<\\\\x00\\\\x80\\\\xd0\\\\xbc\\\\x00 z<\\\\x00\\\\x80-<\\\\x00@S\\\\xbc\\\\x00\\\\xa0\\\\x87:\\\\x00\\\\xe0!\\\\xbd\\\\x00@\\\\x99<\\\\x00\\\\x00\\\\xac\\\\xbc\\\\x00@\\\\x88\\\\xbd\\\\x00\\\\x00\\\\xba<\\\\x00\\\\x80\\\\x03\\\\xbd\\\\x00\\\\xc0\\\\xd8\\\\xbb\\\\x00\\\\x80\\\\x8e\\\\xb9\\\\x00\\\\x008\\\\xbc\\\\x00 \\\\xc9\\\\xbc\\\\x00\\\\x80\\\\xb6\\\\xbc\\\\x00`\\\\x9c=\\\\x00\\\\x00\\\\xcf\\\\xb8\\\\x00 \\\\xfc\\\\xbc\\\\x00\\\\xe0e\\\\xbd\\\\x00@j\\\\xbc\\\\x00@\\\\xb5<\\\\x00\\\\xa0\\\\x81\\\\xbc\\\\x00 \\\\xcc<\\\\x00\\\\x80\\\\xa1\\\\xbc\\\\x00\\\\x00\\\\xff;\\\\x00\\\\xc0R\\\\xbd\\\\x00 /\\\\xbc\\\\x00\\\\x80\\\\xc0\\\\xbb\\\\x00\\\\x80=\\\\xbc\\\\x00@\\\\x1d=\\\\x00\\\\xa0z=\\\\x00 \\\\x1c<\\\\x00 $\\\\xb9\\\\x00\\\\xc0M\\\\xbc\\\\x00\\\\x80\\\\x04\\\\xbd\\\\x00\\\\xe0\\\\xf0<\\\\x00\\\\xe0\\\\xc2<\\\\x00 h\\\\xbc\\\\x00@\\\\xce<\\\\x00 V<\\\\x00 \\\\x00\\\\xbd\\\\x00\\\\x00o=\\\\x00\\\\xc0\\\\x12\\\\xbc\\\\x00@\\\\xf3<\\\\x00\\\\xa0\\\\xcf\\\\xbc\\\\x00\\\\x00\\\\x85:\\\\x00\\\\xc0*;\\\\x00\\\\x00\\\\xde;\\\\x00 \\\\'\\\\xba\\\\x00\\\\x80\\\\x02<\\\\x00\\\\xc0\\\\xe6\\\\xbb\\\\x00@\\\\x95\\\\xbc\\\\x00\\\\xc0\\\\xef\\\\xbc\\\\x00\\\\x80\\\\x88<\\\\x00\\\\xe0\\\\x1f\\\\xbc\\\\x00\\\\xe0[=\\\\x00\\\\xc0$\\\\xbd\\\\x00@\\\\x08\\\\xbd\\\\x00\\\\xe0\\\\x0e\\\\xbd\\\\x00\\\\x00\\\\xb8\\\\xbb\\\\x00\\\\x00\\\\x14\\\\xbc\\\\x00\\\\x00B=\\\\x00\\\\x00\\\\xdd;\\\\x00\\\\x80\\\\xc4\\\\xbc\\\\x00\\\\xc0u<\\\\x00@\\\\x1a\\\\xbd\\\\x00\\\\x00\\\\x01\\\\xbd\\\\x00@E=\\\\x00@\\\\xa0\\\\xbc\\\\x00`\\\\xa4\\\\xba\\\\x00\\\\xe0\\\\xa9<\\\\x00\\\\x80\\\\xf7<\\\\x00`\\\\x9a\\\\xbb\\\\x00\\\\xc0,\\\\xbd\\\\x00\\\\xa0X:\\\\x00\\\\x00%<\\\\x00`\\\"\\\\xbd\\\\x00@r=\\\\x00\\\\xc0\\\\x0b=\\\\x00\\\\xa0-=\\\\x00\\\\x00\\\\x05\\\\xbd\\\\x00`I<\\\\x00@o=\\\\x00\\\\xa0x=\\\\x00\\\\xa0\\\\x06=\\\\x00\\\\xe0q<\\\\x00\\\\xa0\\\\x88\\\\xba\\\\x00\\\\x00A=\\\\x00 B=\\\\x00\\\\x00_\\\\xbc\\\\x00@\\\\xd0;\\\\x00@\\\\x15=\\\\x00\\\\x80\\\\x1b<\\\\x00@N=\\\\x00\\\\xe0\\\\xe7<\\\\x00@\\\\x0e=\\\\x00\\\\xc0=\\\\xbd\\\\x00\\\\xe0\\\\xea\\\\xbc\\\\x00\\\\xa01\\\\xbb\\\\x00\\\\x005\\\\xbd\\\\x00\\\\xe0\\\\xba\\\\xbc\\\\x00\\\\xa0\\\\x92=\\\\x00\\\\xa0,;\\\\x00\\\\xc0\\\\x90\\\\xbc\\\\x00 l;\\\\x00\\\\xc0o\\\\xbd\\\\x00\\\\x00*=\\\\x00\\\\x80\\\\x99:\\\\x00@\\\\xad<\\\\x00`\\\\x8c\\\\xbd\\\\x00\\\\xe0\\\\x84\\\\xbc\\\\x00\\\\x80c\\\\xbd\\\\x00\\\\xe0\\\\xa3<\\\\x00\\\\xe0 =\\\\x00@\\\\x92\\\\xbd\\\\x00\\\\xc0\\\\xa0<\\\\x00 9=\\\\x00\\\\xc0\\\\xbd\\\\xbd\\\\x00@\\\\xa0<\\\\x00@\\\\xe8<\\\\x00@\\\\x82\\\\xbb\\\\x00`\\\\x8c<\\\\x00 e\\\\xba\\\\x00\\\\xa0\\\\xbd\\\\xbc\\\\x00\\\\x00\\\\xe2<\\\\x00@\\\\x8e<\\\\x00\\\\x00d\\\\xbb\\\\x00`\\\\xac;\\\\x00\\\\xa0\\\\xc9\\\\xbc\\\\x00\\\\x00\\\\xf99\\\\x00`=\\\\xbb\\\\x00\\\\x80\\\\x1b<\\\\x00@\\\\xf9;\\\\x00\\\\xa0\\\\x8b\\\\xbb\\\\x00@\\\\r;\\\\x00\\\\xe0^\\\\xbd\\\\x00\\\\xa0.<\\\\x00\\\\x00\\\\xf2\\\\xbc\\\\x00@\\\\x0c\\\\xbd\\\\x00\\\\xc0\\\\n\\\\xbc\\\\x00\\\\xe0s\\\\xbd\\\\x00\\\\x00D\\\\xbd\\\\x00`\\\\x87\\\\xbc\\\\x00 \\\\x84<\\\\x00\\\\xe0\\\\xd0;\\\\x00\\\\xc0^\\\\xbc\\\\x00`\\\\xad\\\\xbc\\\\x00\\\\xe0\\\\x9e\\\\xbc\\\\x00\\\\x80\\\\x08=\\\\x00\\\\x80\\\\xc8<\\\\x00\\\\xe0\\\\x17\\\\xbd\\\\x00`\\\\xc6\\\\xbb\\\\x00\\\\xe06=\\\\x00\\\\xe04\\\\xbc\\\\x00\\\\x00\\\\x17=\\\\x00`\\\\xb1<\\\\x00\\\\xa0D=\\\\x00\\\\xc0\\\\x8a=\\\\x00\\\\x00\\\\xc4\\\\xbc\\\\x00\\\\xc0\\\\x89\\\\xbc\\\\x00\\\\x00x=\\\\x00`\\\\x00=\\\\x00\\\\xc0\\\\xad;\\\\x00@f<\\\\x00\\\\x80Q<\\\\x00\\\\xc08=\\\\x00 9;\\\\x00@\\\\xbb<\\\\x00`\\\\xc0=\\\\x00\\\\x80<=\\\\x00@\\\\xf9<\\\\x00\\\\xa0\\\\xdd\\\\xbb\\\\x00\\\\xa0\\\\x95<\\\\x00\\\\xa0N=\\\\x00\\\\xa0\\\\xc2<\\\\x00 ;<\\\\x00\\\\x00\\\\x92<\\\\x00\\\\x80\\\\xb2<\\\\x00@I\\\\xbc\\\\x00@o=\\\\x00`\\\\x89<\\\\x00\\\\x00!=\\\\x00\\\\x80\\\\xc1\\\\xbb\\\\x00 8=\\\\x00 R\\\\xbd\\\\x00@i=\\\\x00\\\\x00\\\\x86=\\\\x00\\\\x80C\\\\xbc\\\\x00\\\\xa0\\\\x16\\\\xbd\\\\x00\\\\xa00=\\\\x00 \\\\xe3<\\\\x00@E=\\\\x00\\\\xc0\\\\x9d<\\\\x00\\\\x80\\\\x89<\\\\x00\\\\xc0\\\\x98\\\\xbc\\\\x00`\\\\x95\\\\xbc\\\\x00`\\\\x9d<\\\\x00\\\\x00\\\\x16=\\\\x00 \\\\x9f\\\\xbc\\\\x00\\\\x80\\\\x8b<\\\\x00\\\\xe0\\\\x11\\\\xbd\\\\x00\\\\xc0T\\\\xbc\\\\x00@\\\\x97<\\\\x00\\\\x80r<\\\\x00`Z\\\\xbc\\\\x00\\\\xc0\\\\xa6<\\\\x00\\\\xc0/=\\\\x00\\\\xc0\\\\xa1;\\\\x00\\\\x80\\\\xcf\\\\xba\\\\x00\\\\xa0\\\\xf3<\\\\x00\\\\xc0\\\\x1f=\\\\x00\\\\x80\\\\x94\\\\xbb\\\\x00\\\\xc0\\\\x02=\\\\x00`\\\\xc5<\\\\x00\\\\xa0Z=\\\\x00 \\\\x9c\\\\xbc\\\\x00\\\\xa0P<\\\\x00\\\\xe0g\\\\xb9\\\\x00\\\\xe0\\\\xff<\\\\x00\\\\xc0\\\\x84\\\\xbc\\\\x00\\\\x80\\\\x12\\\\xbd\\\\x00\\\\x80\\\\xae<\\\\x00@\\\\xf7\\\\xba\\\\x00@8\\\\xbc\\\\x00 \\\\xf4;\\\\x00\\\\x00/=\\\\x00\\\\xe0_;\\\\x00 z\\\\xbc\\\\x00\\\\xc0\\\\r\\\\xbc\\\\x00\\\\xc08=\\\\x00 \\\\x9a<\\\\x00@?\\\\xbc\\\\x00\\\\xe0T\\\\xbc\\\\x00`\\\\xa1:\\\\x00\\\\x00\\\\x86\\\\xbd\\\\x00\\\\xc0\\\\xcf\\\\xbc\\\\x00`\\\\xed\\\\xbb\\\\x00\\\\xa0\\\\x10\\\\xbd\\\\x00 \\\\x9b\\\\xb9\\\\x00\\\\xc0(\\\\xbd\\\\x00@\\\\x80\\\\xbc\\\\x00@\\\\x0b\\\\xbd\\\\x00`^\\\\xbd\\\\x00\\\\xa0\\\\x19\\\\xbc\\\\x00\\\\x00\\\\x9a<\\\\x00\\\\x80\\\\xaf=\\\\x00@I\\\\xbd\\\\x00\\\\xe0Z\\\\xbc\\\\x00\\\\x802=\\\\x00\\\\x00\\\\\\\\;\\\\x00\\\\x00\\\\x93\\\\xbd\\\\x00\\\\xc0\\\\xce\\\\xbc\\\\x00\\\\xc0\\\\x87\\\\xbc\\\\x00\\\\xa0L\\\\xbc\\\\x00\\\\xa0\\\\x87\\\\xbc\\\\x00\\\\xc0\\\\xe5\\\\xbc\\\\x00 \\\\x84\\\\xbb\\\\x00\\\\xc0i\\\\xbc\\\\x00@\\\\x08<\\\\x00 \\\\xec\\\\xbc\\\\x00\\\\x80\\\\xb69\\\\x00 U<\\\\x00`\\\\x9f\\\\xbc\\\\x00\\\\xa0\\\\x15\\\\xbd\\\\x00\\\\x80\\\\x91\\\\xbc\\\\x00\\\\xa0\\\\x8d\\\\xbd\\\\x00@6<\\\\x00\\\\x80\\\\xa8\\\\xbc\\\\x00 y=\\\\x00\\\\xa04\\\\xbd\\\\x00\\\\xc0\\\\x9d\\\\xbd\\\\x00@\\\\x9b<\\\\x00\\\\xc0\\\\x18\\\\xbd\\\\x00`\\\\x1e\\\\xbc\\\\x00\\\\xa0\\\\xa4\\\\xbb\\\\x00\\\\xc0\\\\x9d;\\\\x00\\\\xc0*\\\\xbd\\\\x00\\\\xc0\\\\x0e=\\\\x00`>=\\\\x00\\\\xa0\\\\xd5\\\\xbc\\\\x00`\\\\xe2<\\\\x00\\\\xc0\\\\xc0=\\\\x00\\\\x00==\\\\x00\\\\xc0c<\\\\x00`\\\\x8a\\\\xbd\\\\x00@\\\\xd1<\\\\x00\\\\x80G\\\\xbd\\\\x00 \\\\x87<\\\\x00\\\\xa0u=\\\\x00\\\\xa0\\\\xe2\\\\xbc\\\\x00\\\\xa0\\\\x1e\\\\xbd\\\\x00\\\\x80u=\\\\x00\\\\xc0f\\\\xbc\\\\x00`\\\\xbd<\\\\x00\\\\xc0\\\\xc0\\\\xbc\\\\x00\\\\xa09\\\\xbc\\\\x00`\\\\xfa\\\\xbb\\\\x00\\\\xe0:\\\\xbb\\\\x00 \\\\xe1\\\\xbb\\\\x00\\\\xe0\\\\x9c<\\\\x00\\\\x80\\\\x92\\\\xbb\\\\x00\\\\xc0\\\\x83\\\\xbd\\\\x00@\\\\x1d\\\\xba\\\\x00\\\\xc0C\\\\xbc\\\\x00`\\\\xae\\\\xbc\\\\x00 \\\\xa1\\\\xba\\\\x00\\\\xe0\\\\x00\\\\xbb\\\\x00 \\\\x95;\\\\x00`b=\\\\x00\\\\xc0\\\\xd5\\\\xbb\\\\x00\\\\x00S\\\\xbc\\\\x00\\\\xc0\\\\xa2<\\\\x00 \\\\x1c=\\\\x00\\\\xc0\\\\xaa<\\\\x00\\\\xa0m\\\\xbc\\\\x00\\\\x80\\\\xab\\\\xbc\\\\x00@\\\\xe1\\\\xbc\\\\x00\\\\x80d\\\\xbc\\\\x00\\\\xc0x\\\\xba\\\\x00\\\\xa0\\\\x11=\\\\x00\\\\xe0\\\\x93\\\\xbc\\\\x00\\\\x80{\\\\xbd\\\\x00\\\\xa0z\\\\xbc\\\\x00\\\\xa0\\\\xc7\\\\xbc\\\\x00\\\\xa0\\\\x06=\\\\x00@\\\\xfa:\\\\x00 \\\\xb4;\\\\x00\\\\xc0\\\\x02\\\\xbc\\\\x00\\\\x00M\\\\xbc\\\\x00\\\\x00\\\\x04\\\\xbd\\\\x00\\\\x80\\\\x12;\\\\x00\\\\x00\\\\'\\\\xbc\\\\x00\\\\x00x<\\\\x00`\\\\x90<\\\\x00 C<\\\\x00@X\\\\xbc\\\\x00\\\\x80\\\\xdf<\\\\x00@\\\\xdf\\\\xbc\\\\x00 1\\\\xb9\\\\x00@\\\\xbf\\\\xbc\\\\x00\\\\xe0j<\\\\x00\\\\x00\\\\xad<\\\\x00\\\\xa0\\\\x00\\\\xbd\\\\x00\\\\x80\\\\x06\\\\xbd\\\\x00 \\\\xea<\\\\x00 \\\\x94<\\\\x00\\\\xe0\\\\xaa<\\\\x00@\\\\n\\\\xbc\\\\x00@\\\\x04\\\\xbd\\\\x00`\\\\x8b<\\\\x00\\\\xe0\\\\xb7<\\\\x00\\\\xe0+=\\\\x00\\\\xe0Q;\\\\x00 !;\\\\x00 \\\\x8a<\\\\x00 \\\\xa3\\\\xbc\\\\x00\\\\x00\\\\xcf\\\\xba\\\\x00@\\\\xb9\\\\xbc\\\\x00\\\\xc0\\\\xd1<\\\\x00\\\\xc0\\\\xcb<\\\\x00`U\\\\xbd\\\\x00 \\\\x19<\\\\x00 u\\\\xbd\\\\x00\\\\x00\\\\x84\\\\xba\\\\x00`\\\\x93\\\\xbc\\\\x00\\\\x00\\\\xa3\\\\xbb\\\\x00 \\\\x92;\\\\x00\\\\x002<\\\\x00\\\\x00\\\\xf2<\\\\x00\\\\xc0i\\\\xbd\\\\x00\\\\x00\\\\xbc\\\\xba\\\\x00`\\\\xa6\\\\xbc\\\\x00\\\\x80\\\\xf1\\\\xbc\\\\x00\\\\x80\\\\x0b\\\\xbd\\\\x00\\\\xe0\\\\xf8\\\\xbb\\\\x00 ;<\\\\x00`\\\\xd1\\\\xbc\\\\x00@9\\\\xba\\\\x00\\\\xa0\\\\xde;\\\\x00\\\\xe0X<\\\\x00@\\\\x81;\\\\x00`\\\\x0e=\\\\x00 \\\\xe2\\\\xbc\\\\x00 \\\\x10<\\\\x00@\\\\x06<\\\\x00\\\\x00\\\\xff\\\\xbc\\\\x00 v<\\\\x00`\\\\x9a\\\\xbc\\\\x00 \\\\x07\\\\xbd\\\\x00`\\\\xfa;\\\\x00\\\\xa0\\\\xca=\\\\x00 \\\\x90\\\\xbc\\\\x00\\\\xe08\\\\xbd\\\\x00@\\\\xe5<\\\\x00\\\\xa0{\\\\xbd\\\\x00\\\\xc0\\\\x8d\\\\xbc\\\\x00\\\\xe0\\\\x01:\\\\x00\\\\x00\\\\xc7<\\\\x00\\\\xc0\\\\xa3\\\\xbc\\\\x00\\\\xc0*=\\\\x00\\\\x00\\\\xca<\\\\x00\\\\xa0\\\\x06\\\\xbc\\\\x00\\\\xe0\\\\xe6\\\\xbc\\\\x00@l\\\\xbc\\\\x00@\\\\x87;\\\\x00@\\\\xa1\\\\xbc\\\\x00`\\\\xd9\\\\xba\\\\x00`\\\"<\\\\x00`=<\\\\x00\\\\x80\\\\xf9;\\\\x00@\\\\xca\\\\xbc\\\\x00 \\\\xd8<\\\\x00@g\\\\xbb\\\\x00\\\\x00\\\\x03\\\\xbd\\\\x00@\\\\xd6\\\\xbd\\\\x00\\\\x00\\\\x1d\\\\xbc\\\\x00`\\\\x85\\\\xbd\\\\x00@\\\\x0f=\\\\x00`\\\\xea\\\\xbc\\\\x00\\\\x80\\\\xd5<\\\\x00@\\\\x9a\\\\xbb\\\\x00\\\\x00#=\\\\x00 \\\\xc5;\\\\x00\\\\x80\\\\xa5\\\\xbc\\\\x00@;\\\\xbd\\\\x00\\\\xc0\\\\x86\\\\xbc\\\\x00\\\\x80\\\\xa2\\\\xbc\\\\x00\\\\xa0\\\\x8a\\\\xbc\\\\x00\\\\x80n\\\\xbc\\\\x00`!\\\\xbd\\\\x00\\\\xc0\\\"<\\\\x00\\\\xc0\\\\xb6<\\\\x00\\\\xe0\\\\xd9<\\\\x00@8;\\\\x00@\\\\xfd<\\\\x00\\\\xa0\\\\xac;\\\\x00\\\\xc0\\\\x0b=\\\\x00\\\\x00\\\\xbf\\\\xbc\\\\x00`\\\\xa6;\\\\x00\\\\xc0@<\\\\x00\\\\xe0d\\\\xbc\\\\x00\\\\x00\\\\xcb\\\\xbb\\\\x00\\\\xc0\\\\xb8\\\\xbc\\\\x00`\\\\x04\\\\xbc\\\\x00\\\\xe0\\\\xd6\\\\xba\\\\x00\\\\xc0\\\\xbd<\\\\x00\\\\xe0\\\\x18\\\\xbb\\\\x00\\\\xe0N=\\\\x00 R\\\\xbc\\\\x00@\\\\x17\\\\xbd\\\\x00\\\\x00\\\\xe8\\\\xbb\\\\x00\\\\x00~\\\\xba\\\\x00`\\\"\\\\xbd\\\\x00\\\\x80)\\\\xbd\\\\x00 \\\\x96<\\\\x00\\\\xe0\\\\xb69\\\\x00\\\\xa0\\\\x19=\\\\x00\\\\xe0b<\\\\x00\\\\x80\\\\xb8;\\\\x00\\\\x00\\\\x14=\\\\x00\\\\xc0\\\\x1f;\\\\x00\\\\xe08=\\\\x00\\\\xa0\\\\x00:\\\\x00 \\\\xa8\\\\xbd\\\\x00\\\\xc0\\\\x96;\\\\x00 \\\\xcf\\\\xbc\\\\x00\\\\xc03\\\\xbd\\\\x00 \\\\x8d\\\\xbd\\\\x00@\\\\xbb<\\\\x00@2\\\\xbd\\\\x00`\\\\x9c<\\\\x00@U<\\\\x00\\\\x00u\\\\xbc\\\\x00\\\\xa0\\\\x8b\\\\xba\\\\x00\\\\xe0`\\\\xbc\\\\x00 \\\\x8e\\\\xbc\\\\x00\\\\xc0 \\\\xbc\\\\x00`\\\\xf0\\\\xbc\\\\x00@\\\\x12\\\\xbd\\\\x00\\\\xe02\\\\xbb\\\\x00 \\\\x80:\\\\x00@c;\\\\x00`K\\\\xbc\\\\x00\\\\xa0z\\\\xbc\\\\x00\\\\x80\\\\xcc<\\\\x00 p<\\\\x00`\\\\xea\\\\xbc\\\\x00\\\\x00\\\\xa1\\\\xbc\\\\x00\\\\x00j:\\\\x00@\\\\xc9\\\\xbb\\\\x00@v:\\\\x00@\\\\xe6\\\\xbc\\\\x00\\\\x00\\\\x03=\\\\x00\\\\x80\\\\x7f\\\\xbd\\\\x00\\\\x80\\\\x81\\\\xbc\\\\x00\\\\x80\\\\x94\\\\xbc\\\\x00 \\\\xc3\\\\xbc\\\\x00`\\\\xc1\\\\xbc\\\\x00\\\\x80\\\\x05=\\\\x00\\\\x00\\\\xac<\\\\x00@\\\\xfa\\\\xbc\\\\x00\\\\xc0\\\\x1b\\\\xbc\\\\x00\\\\x00\\\\x8d\\\\xbc\\\\x00@\\\\xfb;\\\\x00\\\\x00\\\\x8d;\\\\x00`\\\\'=\\\\x00`\\\\x8f9\\\\x00@K\\\\xbc\\\\x00\\\\xe0`\\\\xbc\\\\x00@\\\\xc3\\\\xbc\\\\x00\\\\x00\\\\x96<\\\\x00\\\\xa0\\\\x04\\\\xbd\\\\x00\\\\xa0\\\\xf3\\\\xbc\\\\x00`\\\\x1a\\\\xbd\\\\x00 l<\\\\x00 A\\\\xbc\\\\x00 \\\\x08\\\\xba\\\\x00\\\\xc0~;\\\\x00\\\\x00\\\\xa0<\\\\x00\\\\xc0D\\\\xbc\\\\x00\\\\x00\\\\xcb<\\\\x00@\\\\xc5\\\\xbc\\\\x00\\\\x80)=\\\\x00\\\\x00N<\\\\x00\\\\xe0\\\\xf6<\\\\x00 {\\\\xb9\\\\x00\\\\x00\\\\xc3<\\\\x00@G\\\\xbc\\\\x00\\\\x00\\\\x83\\\\xba\\\\x00\\\\x00Y\\\\xbc\\\\x00\\\\x80\\\\xac<\\\\x00 D=\\\\x00 C\\\\xbb\\\\x00\\\\xe0\\\\x86:\\\\x00 \\\\xbe<\\\\x00 O\\\\xbd\\\\x00`\\\\x89;\\\\x00\\\\xe0a=\\\\x00 \\\\xda\\\\xba\\\\x00\\\\x00D\\\\xbc\\\\x00\\\\xc0\\\\xd2:\\\\x00@\\\\xa1<\\\\x00`v\\\\xbd\\\\x00\\\\xe0M\\\\xbd\\\\x00\\\\xa0>\\\\xbd\\\\x00 E\\\\xbd\\\\x00`\\\\xbc\\\\xbc\\\\x00`\\\\x9b\\\\xbd\\\\x00\\\\x80I;\\\\x00 \\\\x97\\\\xbd\\\\x00\\\\xc0(<\\\\x00\\\\xa0\\\\x06<\\\\x00\\\\x00c\\\\xbb\\\\x00`\\\\x04\\\\xbd\\\\x00\\\\xc0\\\\x10\\\\xbd\\\\x00\\\\xc0\\\\x83\\\\xba\\\\x00`\\\\x00\\\\xbd\\\\x00`\\\\x88;\\\\x00`2\\\\xbb\\\\x00`X\\\\xbc\\\\x00@z\\\\xbc\\\\x00\\\\xe0\\\\x1e\\\\xbd\\\\x00\\\\x00[\\\\xbc\\\\x00`A<\\\\x00\\\\xe0)\\\\xbc\\\\x00 \\\\r=\\\\x00\\\\xc0\\\\x94<\\\\x00 3<\\\\x00\\\\x80|<\\\\x00\\\\x80\\\\x12\\\\xbd\\\\x00\\\\x00/<\\\\x00@\\\\xa5<\\\\x00\\\\xc0\\\\xd6\\\\xbc\\\\x00@\\\\x92\\\\xbc\\\\x00`\\\\x85\\\\xbc\\\\x00\\\\xa0\\\\x91<\\\\x00 (=\\\\x00\\\\x00q<\\\\x00\\\\x00Z\\\\xbc\\\\x00` =\\\\x00\\\\xc0\\\\xac:\\\\x00\\\\xe0q=\\\\x00@k8\\\\x00\\\\xe0&\\\\xbd\\\\x00\\\\xc0\\\\xf4\\\\xbc\\\\x00`\\\\x80<\\\\x00`\\\\x18=\\\\x00\\\\x80\\\\x8c\\\\xbd\\\\x00`\\\\n\\\\xbd\\\\x00 \\\\x14\\\\xbc\\\\x00\\\\x00\\\\xb3<\\\\x00 \\\\x91<\\\\x00`\\\\x98\\\\xbc\\\\x00\\\\x80\\\\x12\\\\xbd\\\\x00`\\\\xf7\\\\xbb\\\\x00\\\\xc0\\\\xa5\\\\xba\\\\x00`\\\\xda\\\\xbc\\\\x00`=\\\\xbd\\\\x00\\\\x80D\\\\xbc\\\\x00\\\\x80X\\\\xbc\\\\x00`C=\\\\x00\\\\x80\\\\x90<\\\\x00\\\\x00\\\\x9f<\\\\x00@\\\\x8e\\\\xbd\\\\x00 \\\\xba\\\\xbc\\\\x00\\\\x00\\\\x93;\\\\x00\\\\x80\\\\xc5=\\\\x00\\\\xe0\\\\x15:\\\\x00\\\\xe0M\\\\xbd\\\\x00\\\\xe0\\\\x92\\\\xbb\\\\x00\\\\xe0\\\\x19\\\\xba\\\\x00\\\\xe0\\\\xcf;\\\\x00`\\\\xcf\\\\xbb\\\\x00 :\\\\xbd\\\\x00`\\\\x0c\\\\xbc\\\\x00 \\\\xaf=\\\\x00\\\\x80\\\\xbe\\\\xbc\\\\x00`\\\\x7f=\\\\x00\\\\xe0\\\\x9d<\\\\x00\\\\x00\\\\xb8<\\\\x00\\\\xa0\\\\xaf\\\\xbb\\\\x00@\\\\x88\\\\xbc\\\\x00@\\\\xb9<\\\\x00\\\\x00\\\\xc7;\\\\x00\\\\xe0\\\\xf9<\\\\x00\\\\x80\\\\xa9\\\\xbc\\\\x00@\\\\x1b<\\\\x00 \\\\xae\\\\xbc\\\\x00\\\\xc0\\\\xa5<\\\\x00 \\\\xaf\\\\xba\\\\x00\\\\x00Y\\\\xbd\\\\x00\\\\xa0\\\\xe9\\\\xbb\\\\x00\\\\x80\\\\x05=\\\\x00 0=\\\\x00 \\\\xae<\\\\x00`\\\\x15\\\\xbd\\\\x00 t\\\\xba\\\\x00\\\\xc0\\\\xe1\\\\xbb\\\\x00\\\\xa0\\\\x01\\\\xbc\\\\x00\\\\xa0\\\\x04<\\\\x00\\\\x80e=\\\\x00@\\\\xa9=\\\\x00\\\\xe0 =\\\\x00\\\\x80\\\\xb6\\\\xbc\\\\x00\\\\x80\\\\xc7\\\\xbc\\\\x00`p\\\\xbc\\\\x00`p\\\\xb9\\\\x00\\\\xe0\\\\xfc\\\\xbc\\\\x00\\\\xc0\\\\\\\\<\\\\x00\\\\x00\\\\xe7\\\\xba\\\\x00\\\\x80\\\\xa6\\\\xbc\\\\x00\\\\x80Q\\\\xbc\\\\x00\\\\xa0&;\\\\x00\\\\xe0Z<\\\\x00 \\\\xd4\\\\xbb\\\\x00\\\\xe0\\\\x1a\\\\xbd\\\\x00\\\\x00\\\\xaf;\\\\x00`\\\\xaa\\\\xbc\\\\x00@\\\\xc7;\\\\x00\\\\x00\\\\x1f\\\\xbd\\\\x00`\\\\xad\\\\xb8\\\\x00`\\\\xb8<\\\\x00\\\\xc0\\\\x9a\\\\xbc\\\\x00\\\\x00\\\\xdb:\\\\x00 \\\\x12\\\\xbd\\\\x00`\\\\xfc\\\\xba\\\\x00\\\\xa0N<\\\\x00\\\\xa0A\\\\xbc\\\\x00`\\\\x90\\\\xbc\\\\x00\\\\xa0\\\\x89;\\\\x00\\\\x00;\\\\xbb\\\\x00\\\\x80-=\\\\x00\\\\xc0\\\\xca\\\\xbc\\\\x00 -\\\\xbc\\\\x00@Z=\\\\x00`\\\\x8d\\\\xbb\\\\x00\\\\xc0\\\\xa2\\\\xbd\\\\x00`\\\\x03\\\\xbd\\\\x00\\\\x80R\\\\xbc\\\\x00\\\\x80r\\\\xbd\\\\x00\\\\x80?\\\\xbc\\\\x00\\\\x80\\\\xe3<\\\\x00\\\\xc0=\\\\xbd\\\\x00@\\\\xb2<\\\\x00\\\\x00y\\\\xbc\\\\x00\\\\xc0\\\\x13<\\\\x00\\\\xc0\\\\xde\\\\xbc\\\\x00`\\\\xeb<\\\\x00\\\\x00\\\\xc6\\\\xbc\\\\x00\\\\xa0\\\\x95:\\\\x00`\\\\xb2\\\\xbd\\\\x00\\\\x80\\\\xb0\\\\xbd\\\\x00\\\\xc0\\\\x1c=\\\\x00@\\\\x86\\\\xbb\\\\x00 R\\\\xbd\\\\x00\\\\xc0G=\\\\x00\\\\xa0\\\\xe8\\\\xbc\\\\x00\\\\xe0 \\\\xbd\\\\x00\\\\xc0\\\\xc0<\\\\x00\\\\x00Z\\\\xbc\\\\x00\\\\xa0\\\\x94\\\\xbc\\\\x00\\\\xe0\\\\xcf;\\\\x00\\\\xa0\\\\x1c=\\\\x00 8=\\\\x00\\\\x80&<\\\\x00@\\\\xaf<\\\\x00`\\\\xc5\\\\xb8\\\\x00\\\\xc0\\\\x9a\\\\xbc\\\\x00`\\\\xce\\\\xbc\\\\x00\\\\x80h\\\\xbc\\\\x00@Y=\\\\x00\\\\xc0\\\\xd9;\\\\x00\\\\xa0\\\\xd6\\\\xba\\\\x00\\\\x005=\\\\x00`\\\\xdc<\\\\x00`L=\\\\x00\\\\x00e\\\\xbb\\\\x00 %\\\\xbc\\\\x00\\\\x80k=\\\\x00`\\\\x88<\\\\x00\\\\x00\\\\x94\\\\xbd\\\\x00 \\\\x81\\\\xbc\\\\x00\\\\xc0\\\\x93\\\\xbc\\\\x00\\\\xc0\\\\xf8\\\\xbc\\\\x00@\\\\xa0<\\\\x00\\\\xe0\\\\xb0\\\\xbd\\\\x00\\\\x809=\\\\x00\\\\x00\\\\x9d<\\\\x00 2<\\\\x00`g\\\\xbd\\\\x00\\\\x80\\\\x94<\\\\x00\\\\xc0\\\\x1d=\\\\x00\\\\x80\\\\xe9\\\\xbb\\\\x00\\\\xe0\\\\x9b<\\\\x00\\\\xa0\\\\xfd;\\\\x00@\\\\xf4<\\\\x00 \\\\xb7\\\\xbb\\\\x00@\\\\xad<\\\\x00\\\\xa0G\\\\xbd\\\\x00@\\\\xfe<\\\\x00\\\\x00\\\\xb4<\\\\x00\\\\x80*\\\\xbc\\\\x00 d\\\\xbb\\\\x00\\\\xc0\\\\xb0:\\\\x00\\\\xc0m<\\\\x00@N<\\\\x00\\\\x80O\\\\xbc\\\\x00\\\\xa0l=\\\\x00`j\\\\xbc\\\\x00\\\\xe0\\\\x07=\\\\x00\\\\xe0*\\\\xbc\\\\x00\\\\x80r\\\\xbd\\\\x00`\\\\xeb<\\\\x00@~<\\\\x00@!<\\\\x00@\\\\x16=\\\\x00\\\\xa0\\\\x9e=\\\\x00@\\\\xaa=\\\\x00\\\\x80q=\\\\x00@\\\\x86\\\\xbc\\\\x00@\\\\xdd\\\\xbb\\\\x00\\\\x00\\\\x82\\\\xbd\\\\x00\\\\x80\\\\xa7<\\\\x00\\\\xa0\\\\xf3\\\\xbb\\\\x00`\\\\xc9\\\\xba\\\\x00\\\\x80\\\\xe7\\\\xbb\\\\x00\\\\xa0\\\\xed\\\\xba\\\\x00\\\\xa0\\\\xdb;\\\\x00@\\\\x12\\\\xbd\\\\x00\\\\xe0|<\\\\x00\\\\xc0\\\\x08<\\\\x00\\\\x00\\\\xc7\\\\xbb\\\\x00 &\\\\xbc\\\\x00\\\\x00+=\\\\x00\\\\xa0\\\\xc7<\\\\x00\\\\xc0\\\\xaf<\\\\x00  =\\\\x00\\\\x00\\\\x0f\\\\xbd\\\\x00\\\\xe0 ;\\\\x00 S\\\\xbb\\\\x00\\\\x80\\\\x91\\\\xbb\\\\x00\\\\x80\\\\x0c\\\\xbd\\\\x00\\\\xa0f\\\\xbc\\\\x00 \\\\xda\\\\xbc\\\\x00\\\\xc0\\\\xf1\\\\xbc\\\\x00\\\\x00\\\\x17<\\\\x00\\\\xa0\\\\x8d\\\\xbc\\\\x00\\\\xe0y\\\\xbb\\\\x00\\\\xe0\\\\xce=\\\\x00\\\\x00B\\\\xbd\\\\x00\\\\xa0~<\\\\x00 C\\\\xbc\\\\x00 \\\\xb9\\\\xbd\\\\x00\\\\xe0~\\\\xbd\\\\x00@\\\\xdb\\\\xbb\\\\x00@%<\\\\x00\\\\xc0l=\\\\x00\\\\x00\\\\xf6\\\\xbb\\\\x00\\\\xe0\\\\xe4\\\\xbc\\\\x00\\\\x80\\\\xa4=\\\\x00\\\\x00f\\\\xbc\\\\x00\\\\xe0k\\\\xbc\\\\x00 \\\\xbf<\\\\x00\\\\x80\\\\x9b<\\\\x00\\\\xe0\\\\xd6\\\\xbc\\\\x00\\\\x80\\\\x0c\\\\xbd\\\\x00\\\\x00\\\\x89<\\\\x00 \\\\xe6\\\\xbb\\\\x00\\\\x00\\\\x82\\\\xbb\\\\x00`\\\\x81\\\\xbd\\\\x00 S\\\\xba\\\\x00\\\\xa0C<\\\\x00\\\\xc0\\\\xde<\\\\x00\\\\xa0\\\\x98:\\\\x00\\\\x005=\\\\x00`\\\\x89\\\\xbd\\\\x00 >\\\\xbc\\\\x00\\\\x00\\\\xc5;\\\\x00@E\\\\xbd\\\\x00\\\\x00m<\\\\x00 \\\\xb7<\\\\x00`\\\\x06=\\\\x00@>\\\\xbd\\\\x00\\\\xc0m<\\\\x00\\\\x00\\\\xb5\\\\xbc\\\\x00\\\\xc0l\\\\xbd\\\\x00\\\\x00\\\\xd9<\\\\x00\\\\xa06\\\\xbc\\\\x00\\\\xa0\\\\x90<\\\\x00@\\\\xc6\\\\xbc\\\\x00\\\\xe0\\\\xbf;\\\\x00 \\\\xd8;\\\\x00`>\\\\xbd\\\\x00`\\\\xc0\\\\xbc\\\\x00\\\\xe0\\\\xb0=\\\\x00\\\\xc0\\\\xa4<\\\\x00@\\\\x95\\\\xbc\\\\x00@\\\\x03<\\\\x00 \\\\xe9\\\\xbb\\\\x00@c<\\\\x00\\\\x80\\\\x889\\\\x00@\\\\xde<\\\\x00\\\\x80\\\\xb6<\\\\x00\\\\xc0\\\\xbe<\\\\x00\\\\xc0\\\\x0b<\\\\x00\\\\x00A=\\\\x00@\\\\xdf\\\\xbc\\\\x00\\\\x00H\\\\xbd\\\\x00\\\\x80\\\\x0e\\\\xbd\\\\x00\\\\xe0\\\\xe6;\\\\x00\\\\x80\\\\x10\\\\xbd\\\\x00@\\\\x07\\\\xbd\\\\x00\\\\x80b;\\\\x00\\\\x00\\\\xe5\\\\xbb\\\\x00\\\\xa0\\\\xe8;\\\\x00\\\\xc0\\\\x10\\\\xbd\\\\x00\\\\xc0\\\\xac\\\\xbc\\\\x00\\\\xc0\\\\x97<\\\\x00\\\\xa0\\\\xe9<\\\\x00\\\\xc0\\\\xae\\\\xbc\\\\x00@9=\\\\x00\\\\x00Q;\\\\x00\\\\x00\\\\t\\\\xbd\\\\x00\\\\xa0\\\\x1b\\\\xbc\\\\x00\\\\xa0\\\\x01<\\\\x00 \\\\xd1;\\\\x00\\\\x00\\\\x1d=\\\\x00 \\\\xbf<\\\\x00\\\\xa0\\\\xeb\\\\xbc\\\\x00@\\\\x88;\\\\x00\\\\xe0;<\\\\x00`P\\\\xbd\\\\x00\\\\xa03\\\\xbd\\\\x00`\\\\xc5\\\\xbb\\\\x00`0<\\\\x00\\\\xa0\\\\t\\\\xbc\\\\x00`z<\\\\x00\\\\xc0\\\\xed\\\\xba\\\\x00\\\\xa0\\\\xc7<\\\\x00\\\\x80\\\\x12=\\\\x00`<\\\\xbd\\\\x00\\\\xe0\\\\x81=\\\\x00\\\\xa0\\\\xc4\\\\xbc\\\\x00@g=\\\\x00  <\\\\x00 \\\\xbb;\\\\x00\\\\x80\\\\xaa;\\\\x00\\\\xc0\\\\xdd\\\\xbc\\\\x00`K\\\\xbd\\\\x00\\\\x80,=\\\\x00 \\\\xcd\\\\xbc\\\\x00 V<\\\\x00\\\\xc0\\\\x19=\\\\x00@i=\\\\x00 \\\\xbc\\\\xbb\\\\x00\\\\x00\\\\xf0;\\\\x00\\\\x00\\\\xcf\\\\xbb\\\\x00\\\\xa0\\\\xd09\\\\x00`\\\\x92\\\\xbc\\\\x00\\\\x80q\\\\xbc\\\\x00\\\\x00\\\\xaf<\\\\x00\\\\xc0\\\\x08=\\\\x00 \\\\xe0\\\\xbd\\\\x00`\\\\x08=\\\\x00\\\\x00\\\\x9b\\\\xbc\\\\x00\\\\x80\\\\x84\\\\xb9\\\\x00\\\\x80\\\\x81<\\\\x00`h=\\\\x00@$\\\\xbc\\\\x00\\\\x00\\\\x94\\\\xbc\\\\x00\\\\x80\\\\x92<\\\\x00\\\\x80\\\\x81<\\\\x00 \\\\x87\\\\xbc\\\\x00@T\\\\xbb\\\\x00 \\\\xcd\\\\xbc\\\\x00\\\\x00S<\\\\x00\\\\xe0A=\\\\x00\\\\x80\\\\xc7\\\\xbb\\\\x00`\\\\x92\\\\xbc\\\\x00 \\\\x07\\\\xbc\\\\x00\\\\xc0\\\\xe8<\\\\x00\\\\x00\\\\xa3;\\\\x00 \\\\xde;\\\\x00\\\\xc0\\\\x82\\\\xbd\\\\x00\\\\xa0F\\\\xbd\\\\x00\\\\x80\\\\x90<\\\\x00@M=\\\\x00@\\\\x9f<\\\\x00 \\\\xe1\\\\xbc\\\\x00\\\\x00@<\\\\x00`4=\\\\x00\\\\x00\\\\r\\\\xbc\\\\x00`\\\\xec<\\\\x00 A\\\\xbc\\\\x00 1<\\\\x00 \\\"=\\\\x00\\\\xc0\\\\x16\\\\xbd\\\\x00\\\\x80\\\\x8f\\\\xbc\\\\x00\\\\x80\\\\xb4\\\\xbc\\\\x00 R\\\\xbd\\\\x00\\\\xe0\\\\xff<\\\\x00\\\\xc02\\\\xbd\\\\x00 \\\\x9c=\\\\x00\\\\xc0\\\\x17;\\\\x00\\\\xc0K<\\\\x00@\\\\x82\\\\xbc\\\\x00\\\\xa0g\\\\xbc\\\\x00\\\\xa0\\\\x07<'\",\n          \"b'\\\\'\\\\x00\\\\x00\\\\xc0\\\\xba\\\\xbb\\\\x00 \\\\xbc\\\\xbb\\\\x00\\\\xa0\\\\xd7\\\\xbb\\\\x00`\\\\xf8\\\\xbc\\\\x00 \\\\xcd\\\\xbc\\\\x00\\\\xa0\\\\x01;\\\\x00@t\\\\xbc\\\\x00\\\\xa0?<\\\\x00\\\\x80\\\\xc9\\\\xbb\\\\x00\\\\xc0@=\\\\x00`\\\\x1b\\\\xbd\\\\x00\\\\x00\\\\xf4\\\\xbb\\\\x00 \\\\xf5\\\\xbb\\\\x00@=\\\\xbc\\\\x00\\\\xe0\\\\xf8\\\\xbc\\\\x00\\\\x00\\\\xa4\\\\xbc\\\\x00\\\\xa0\\\\x80;\\\\x00`&=\\\\x00\\\\xe0T;\\\\x00\\\\xe0\\\\x8c\\\\xbc\\\\x00\\\\xe0 \\\\xbc\\\\x00\\\\xe0\\\\xd5\\\\xbb\\\\x00\\\\xe0\\\\x14\\\\xbd\\\\x00 \\\\x9c\\\\xbb\\\\x00 \\\\x8e\\\\xbc\\\\x00@\\\\r\\\\xbd\\\\x00\\\\x00\\\\x91\\\\xbc\\\\x00\\\\xc0\\\\xbc\\\\xbc\\\\x00\\\\x009\\\\xbd\\\\x00\\\\xe0\\\\x8f\\\\xbd\\\\x00`\\\\x86\\\\xbc\\\\x00 \\\\xd4=\\\\x00\\\\xe0\\\\x88<\\\\x00\\\\x80\\\\xb1<\\\\x00`\\\\xaa\\\\xbc\\\\x00\\\\xc0\\\\x08<\\\\x00\\\\x00\\\\xc1\\\\xbb\\\\x00\\\\xe0\\\\xa2<\\\\x00@h<\\\\x00\\\\x00T\\\\xbc\\\\x00 \\\\x07=\\\\x00\\\\xa0\\\\xc2\\\\xbc\\\\x00\\\\xa0\\\\xa3=\\\\x00\\\\x80\\\\xf8\\\\xbc\\\\x00\\\\xc0\\\\x84<\\\\x00 \\\\x18<\\\\x00\\\\x00E<\\\\x00\\\\xe0Q\\\\xbd\\\\x00\\\\x00=<\\\\x00\\\\x00\\\\xac\\\\xbc\\\\x00\\\\xa0l;\\\\x00\\\\x80[\\\\xbd\\\\x00\\\\x80O<\\\\x00@\\\\x7f\\\\xbc\\\\x00@\\\\xd5\\\\xbc\\\\x00\\\\x00\\\\x1a\\\\xbd\\\\x00@\\\\xdd\\\\xbc\\\\x00 \\\\xd4<\\\\x00\\\\x80\\\\x01=\\\\x00`}\\\\xbb\\\\x00\\\\xa0\\\\xab\\\\xbc\\\\x00`g\\\\xbc\\\\x00@\\\\xe6<\\\\x00`,\\\\xbc\\\\x00`\\\\x87<\\\\x00@\\\\xdd\\\\xbc\\\\x00\\\\x00\\\\x82\\\\xbd\\\\x00\\\\xa0y<\\\\x00@\\\\xfe;\\\\x00\\\\xe0\\\\xfa<\\\\x00\\\\x00\\\\x91<\\\\x00\\\\x80\\\\x06\\\\xbd\\\\x00\\\\xa09<\\\\x00 \\\\x01<\\\\x00\\\\xc04\\\\xbc\\\\x00\\\\xe0\\\\xe7\\\\xbc\\\\x00\\\\xa0n;\\\\x00\\\\xa0e<\\\\x00\\\\xc0\\\\x0c<\\\\x00`\\\\x94<\\\\x00\\\\xc0\\\\n\\\\xbd\\\\x00`\\\\xa6\\\\xbc\\\\x00\\\\xc0\\\\xf3\\\\xbc\\\\x00\\\\xc0\\\\xdb<\\\\x00`Z\\\\xbd\\\\x00`\\\\x00\\\\xbc\\\\x00\\\\x00\\\\x89;\\\\x00`\\\\n<\\\\x00\\\\xe0\\\\xde\\\\xbc\\\\x00`r\\\\xbd\\\\x00\\\\x80\\\\xd9\\\\xbc\\\\x00 #;\\\\x00\\\\x00\\\\x86\\\\xbd\\\\x00\\\\x80\\\\x8c<\\\\x00@:;\\\\x00\\\\xe0\\\\xca\\\\xbc\\\\x00`B=\\\\x00@!=\\\\x00 #\\\\xbc\\\\x00 \\\\x17\\\\xbd\\\\x00@\\\\xb3\\\\xbc\\\\x00\\\\xe0\\\\xdb\\\\xbc\\\\x00\\\\xc04\\\\xbd\\\\x00`\\\\x08\\\\xbc\\\\x00`\\\\xe9\\\\xbc\\\\x00@g\\\\xbc\\\\x00\\\\x80\\\\xf2<\\\\x00\\\\x80\\\\xf6<\\\\x00`\\\\x1a<\\\\x00@\\\\xe3<\\\\x00\\\\x00+\\\\xbd\\\\x00\\\\x00\\\\x99<\\\\x00\\\\xc0~\\\\xbc\\\\x00\\\\x00\\\\xb6\\\\xbc\\\\x00\\\\x80\\\\xa2\\\\xbc\\\\x00 \\\\x9c<\\\\x00\\\\xa0\\\\x1d\\\\xbd\\\\x00\\\\xc0t<\\\\x00\\\\xe0M<\\\\x00\\\\xe0\\\\xc7;\\\\x00\\\\x80\\\\x95;\\\\x00 \\\\x02=\\\\x00\\\\x80\\\\x12\\\\xbd\\\\x00\\\\xa0\\\\xc9<\\\\x00\\\\x00\\\\xe9\\\\xb7\\\\x00\\\\xa0\\\\xa6<\\\\x00\\\\x80:<\\\\x00\\\\x00\\\\xb5\\\\xbc\\\\x00\\\\xa0\\\\t\\\\xbd\\\\x00 \\\\xd9<\\\\x00\\\\xe0=\\\\xbc\\\\x00\\\\xe0\\\\xbc;\\\\x00\\\\xa0\\\"\\\\xbd\\\\x00\\\\xc0\\\\x93<\\\\x00@-\\\\xbb\\\\x00@\\\\x97\\\\xbc\\\\x00@2\\\\xbc\\\\x00@t\\\\xbb\\\\x00\\\\xc0!\\\\xbd\\\\x00@\\\\x0f<\\\\x00\\\\x00E\\\\xbc\\\\x00\\\\xc0\\\\xe8\\\\xbc\\\\x00`\\\\x18<\\\\x00@\\\\xee\\\\xbc\\\\x00\\\\xc0*\\\\xbd\\\\x00\\\\x00x\\\\xbc\\\\x00\\\\xc0C\\\\xbc\\\\x00\\\\x80\\\\xf9<\\\\x00`\\\\xc3<\\\\x00`\\\\xb3;\\\\x00\\\\xa0e\\\\xbd\\\\x00\\\\xe0\\\\xba\\\\xba\\\\x00\\\\xe0\\\\xfc\\\\xbc\\\\x00\\\\xe0|=\\\\x00\\\\xc0\\\\xac;\\\\x00\\\\x80\\\\xb0=\\\\x00@\\\\xa7\\\\xbb\\\\x00\\\\x00\\\\x19=\\\\x00\\\\xe0\\\\x86\\\\xbc\\\\x00\\\\xc0\\\\x83=\\\\x00\\\\xc00=\\\\x00\\\\x80H<\\\\x00\\\\x00,;\\\\x00\\\\xe0\\\\xe2<\\\\x00\\\\x80\\\\x04<\\\\x00\\\\xe0\\\\xd0\\\\xbc\\\\x00\\\\x00\\\\x02\\\\xbd\\\\x00\\\\x80\\\\x93<\\\\x00\\\\x00\\\\xe7<\\\\x00@\\\\x7f=\\\\x00`%\\\\xbc\\\\x00 9;\\\\x00\\\\xe0\\\\x06=\\\\x00@\\\\xe8\\\\xbc\\\\x00@\\\\x9e\\\\xbc\\\\x00\\\\xa0\\\\xec\\\\xbc\\\\x00@\\\\x1f<\\\\x00`\\\\x04<\\\\x00\\\\x80\\\\xa1\\\\xb8\\\\x00\\\\xe0\\\\x93<\\\\x00\\\\x00x<\\\\x00 \\\\xe9\\\\xbc\\\\x00`\\\\x12=\\\\x00\\\\x80\\\\t\\\\xbc\\\\x00`\\\\xbe:\\\\x00\\\\x00T\\\\xbd\\\\x00\\\\x80O<\\\\x00`\\\\xec\\\\xbc\\\\x00@\\\\xae<\\\\x00\\\\xe0\\\\x91<\\\\x00\\\\x00\\\\xb4\\\\xbb\\\\x00\\\\xc0\\\\xf2<\\\\x00\\\\x80\\\\x08\\\\xbc\\\\x00 \\\\xe2\\\\xbb\\\\x00 r\\\\xba\\\\x00\\\\x00G\\\\xbc\\\\x00\\\\xa0\\\\xe6\\\\xbc\\\\x00\\\\x80\\\\x1a\\\\xbc\\\\x00\\\\xe0R\\\\xbb\\\\x00@ <\\\\x00\\\\x00\\\\x02<\\\\x00@\\\\x85\\\\xba\\\\x00\\\\xc0\\\\xd3\\\\xbb\\\\x00\\\\x80\\\\xcc\\\\xbc\\\\x00@\\\\xe4\\\\xbc\\\\x00 \\\\xb7\\\\xbc\\\\x00`\\\\xd1\\\\xbb\\\\x00\\\\x80\\\\xa5<\\\\x00\\\\x80\\\\xa5\\\\xbb\\\\x00\\\\x00\\\\xa5<\\\\x00\\\\x80\\\\xd5\\\\xba\\\\x00`\\\\x11\\\\xbd\\\\x00\\\\x00\\\\xc9;\\\\x00@\\\\x81\\\\xbb\\\\x00\\\\xc0~;\\\\x00\\\\xa0\\\\xa6\\\\xbb\\\\x00`x\\\\xbc\\\\x00\\\\xe0\\\\x0e=\\\\x00`\\\\x00\\\\xbc\\\\x00@\\\\x95<\\\\x00\\\\xa0\\\\x9f\\\\xbc\\\\x00\\\\xe0<\\\\xbd\\\\x00`}\\\\xbc\\\\x00`L;\\\\x00@\\\\xb5\\\\xbc\\\\x00\\\\x009<\\\\x00`\\\\x87\\\\xbc\\\\x00 _<\\\\x00 \\\\x03\\\\xbc\\\\x00\\\\xe0\\\\xef;\\\\x00\\\\x80\\\\x19=\\\\x00\\\\xe0M<\\\\x00\\\\x00\\\\x82\\\\xbc\\\\x00\\\\x80\\\\xa1\\\\xbc\\\\x00\\\\xc0l\\\\xbd\\\\x00\\\\x00\\\\x8c<\\\\x00\\\\xa0\\\\x0e=\\\\x00\\\\xe0j=\\\\x00`\\\\x92:\\\\x00\\\\x80\\\\xa1\\\\xbb\\\\x00\\\\x80j<\\\\x00 \\\\xad\\\\xbc\\\\x00 \\\\xb9\\\\xbc\\\\x00`\\\\x8b\\\\xbb\\\\x00\\\\x80\\\\xf7;\\\\x00`\\\\x05=\\\\x00\\\\xe0\\\\r=\\\\x00\\\\x80\\\\xa3\\\\xbc\\\\x00`\\\\x85\\\\xbc\\\\x00\\\\x80 \\\\xbc\\\\x00@\\\\xb3;\\\\x00`\\\\x0f\\\\xbc\\\\x00 \\\\xee<\\\\x00\\\\x80,=\\\\x00\\\\x00\\\\xdf\\\\xbc\\\\x00\\\\xa0,=\\\\x00@\\\\xaa<\\\\x00 A<\\\\x00@4\\\\xbd\\\\x00\\\\x80f=\\\\x00`6\\\\xbc\\\\x00\\\\x80\\\\x82=\\\\x00\\\\x80N\\\\xbb\\\\x00\\\\xc0\\\\xe8;\\\\x00\\\\xe0\\\\x9b\\\\xbb\\\\x00\\\\x00x7\\\\x00@A<\\\\x00\\\\xe0d<\\\\x00\\\\xe0\\\\x16\\\\xbc\\\\x00\\\\x808<\\\\x00@\\\\xc8:\\\\x00\\\\xa0\\\\x0e\\\\xbd\\\\x00\\\\xe0;\\\\xbc\\\\x00\\\\xc0,=\\\\x00\\\\xc0\\\\x07=\\\\x00\\\\x80,\\\\xbd\\\\x00\\\\xe0\\\\xaa\\\\xbb\\\\x00`\\\\x15\\\\xbd\\\\x00@\\\\xf9\\\\xbb\\\\x00\\\\xe0\\\\xa8<\\\\x00@E:\\\\x00\\\\x00\\\\xeb<\\\\x00\\\\x80\\\\xbf<\\\\x00\\\\x008;\\\\x00\\\\xc0\\\\x9a<\\\\x00\\\\x00\\\\x93=\\\\x00\\\\xc0\\\\xfa;\\\\x00\\\\x80\\\\xad\\\\xbb\\\\x00`\\\\xfe\\\\xbc\\\\x00\\\\x80\\\\x83\\\\xbc\\\\x00@\\\\xc5<\\\\x00\\\\xa0\\\\x98<\\\\x00\\\\xe0\\\\xa1;\\\\x00\\\\x00Y<\\\\x00\\\\x80\\\\x8f;\\\\x00\\\\x00A\\\\xbc\\\\x00\\\\xc0,\\\\xbc\\\\x00`\\\\xb6=\\\\x00\\\\xc0\\\\x17\\\\xbd\\\\x00 s<\\\\x00\\\\xa0W\\\\xbd\\\\x00\\\\xa0=\\\\xba\\\\x00\\\\x00\\\\xf1\\\\xbc\\\\x00`\\\\xa7\\\\xbc\\\\x00\\\\xc0\\\\xed\\\\xbb\\\\x00\\\\xa0\\\\x0e\\\\xbc\\\\x00 \\\\xfe\\\\xbc\\\\x00\\\\x80\\\\x1f=\\\\x00 \\\\x08=\\\\x00@\\\\x88\\\\xbc\\\\x00 \\\\xb8\\\\xbc\\\\x00\\\\xc0#=\\\\x00 U<\\\\x00\\\\xc0#\\\\xbc\\\\x00\\\\x00(=\\\\x00`\\\\xde\\\\xbb\\\\x00\\\\xc0\\\\xe4<\\\\x00\\\\x00p<\\\\x00\\\\xc07<\\\\x00\\\\x00\\\\x1b<\\\\x00\\\\x80R\\\\xbd\\\\x00\\\\xa0\\\\x97=\\\\x00\\\\xe0\\\\x14=\\\\x00 <\\\\xbd\\\\x00`\\\\x91=\\\\x00\\\\x001\\\\xbc\\\\x00\\\\x00\\\\xc1\\\\xbd\\\\x00\\\\x80\\\\x87<\\\\x00\\\\x806=\\\\x00\\\\xa0\\\\xbd\\\\xbc\\\\x00@ =\\\\x00@a:\\\\x00\\\\xe0\\\\xd1\\\\xbc\\\\x00 \\\\x97\\\\xbd\\\\x00\\\\xa0\\\\xa9<\\\\x00 \\\\x00\\\\xbd\\\\x00\\\\xa0\\\\xad<\\\\x00@\\\\x85=\\\\x00\\\\xa0\\\\xdc<\\\\x00\\\\xa0(\\\\xbd\\\\x00\\\\xc0\\\\x98<\\\\x00\\\\x803\\\\xbd\\\\x00@S\\\\xbd\\\\x00\\\\x80\\\\x0e<\\\\x00\\\\xe0)=\\\\x00 \\\\xde<\\\\x00\\\\xa0=\\\\xbd\\\\x00@\\\\x8a<\\\\x00 E\\\\xbd\\\\x00\\\\x80\\\\xb9<\\\\x00\\\\x80\\\\x03\\\\xbd\\\\x00\\\\xe0\\\\t\\\\xbd\\\\x00`\\\\xd4\\\\xbb\\\\x00\\\\xc0\\\\x11\\\\xbd\\\\x00\\\\xe0I=\\\\x00 \\\\xb1;\\\\x00\\\\xc0G\\\\xbd\\\\x00`\\\\xd2<\\\\x00\\\\xe0\\\\xa2=\\\\x00\\\\xe0\\\\xed\\\\xbc\\\\x00\\\\x80!<\\\\x00\\\\xe0\\\\xb0:\\\\x00\\\\xe0P\\\\xbc\\\\x00\\\\xe0\\\\x9b<\\\\x00\\\\x00\\\\x85;\\\\x00\\\\xc0\\\\x94\\\\xbc\\\\x00`\\\\xe0<\\\\x00\\\\x00\\\\xb9;\\\\x00\\\\x00\\\\x12;\\\\x00\\\\x00\\\\x81\\\\xba\\\\x00\\\\x80\\\\xd8\\\\xbb\\\\x00@\\\\x00\\\\xbd\\\\x00`\\\\xff<\\\\x00\\\\xc0\\\\t;\\\\x00\\\\xe0\\\\xad<\\\\x00`\\\\xa8:\\\\x00`\\\\x82\\\\xbc\\\\x00\\\\xc0\\\\x1c\\\\xbd\\\\x00\\\\x00`=\\\\x00`\\\\x1d<\\\\x00\\\\x80\\\\xa6<\\\\x00\\\\x80\\\\x04\\\\xbd\\\\x00\\\\x00\\\\xb5=\\\\x00`\\\\xc7\\\\xbc\\\\x00@\\\\xa3<\\\\x00\\\\xe0\\\\x10<\\\\x00\\\\x80\\\\x16\\\\xbc\\\\x00@)\\\\xbc\\\\x00 N=\\\\x00\\\\xa0\\\\xaf<\\\\x00\\\\xe0\\\\x9e<\\\\x00\\\\xe0\\\\x9b\\\\xbc\\\\x00 \\\\x05=\\\\x00\\\\xc0\\\\x97\\\\xbc\\\\x00\\\\xc0\\\\xa0\\\\xbc\\\\x00\\\\x00Z\\\\xba\\\\x00`\\\\x0c\\\\xbc\\\\x00\\\\xe0L;\\\\x00\\\\xa0\\\\x15:\\\\x00@\\\\x9c\\\\xbb\\\\x00@\\\\xbc=\\\\x00\\\\xc0\\\\xaa\\\\xbc\\\\x00 \\\\x01\\\\xbd\\\\x00\\\\xa0\\\\x06=\\\\x00\\\\x80X\\\\xba\\\\x00\\\\xe0\\\\x89\\\\xbc\\\\x00\\\\x00\\\\x83=\\\\x00\\\\xa0\\\\xe8\\\\xbb\\\\x00`\\\\xd7<\\\\x00\\\\x00V<\\\\x00\\\\x80b\\\\xbb\\\\x00\\\\x80J=\\\\x00\\\\xa0\\\\'<\\\\x00\\\\xc0o<\\\\x00 \\\\xeb\\\\xbc\\\\x00\\\\x80*;\\\\x00\\\\x805\\\\xbd\\\\x00@\\\\x08<\\\\x00`j<\\\\x00\\\\x80y\\\\xbc\\\\x00@\\\\xb4\\\\xbc\\\\x00\\\\x00\\\\x12=\\\\x00@\\\\x8e\\\\xbc\\\\x00\\\\xe0\\\\x12<\\\\x00\\\\x00h<\\\\x00\\\\xa0\\\\xe3\\\\xbb\\\\x00 \\\\x8a<\\\\x00\\\\xc0\\\\xc3\\\\xbc\\\\x00@\\\\xd0<\\\\x00 \\\\xe8<\\\\x00\\\\x00y<\\\\x00 \\\\xc2\\\\xbb\\\\x00@e\\\\xbc\\\\x00`\\\\x82\\\\xbd\\\\x00\\\\xe0\\\\x11\\\\xbc\\\\x00 \\\\xd1\\\\xbc\\\\x00@\\\\x08\\\\xbd\\\\x00\\\\xa0}=\\\\x00`\\\\x12\\\\xbd\\\\x00@\\\\x88<\\\\x00\\\\x00\\\\xb7\\\\xbc\\\\x00\\\\xc0\\\\x8c\\\\xba\\\\x00\\\\xc0\\\\xa3<\\\\x00\\\\x00\\\\x19=\\\\x00@\\\\x1e\\\\xbb\\\\x00\\\\xc0\\\\x18<\\\\x00\\\\xa0\\\\xb7:\\\\x00\\\\x00\\\\xbf\\\\xbc\\\\x00\\\\x80\\\\xfc\\\\xbc\\\\x00\\\\xa0\\\\x9d\\\\xbc\\\\x00\\\\xc0\\\\x84\\\\xbc\\\\x00 \\\\x9e<\\\\x00`\\\\xd6\\\\xbc\\\\x00\\\\xc0\\\\xfa<\\\\x00\\\\xe0\\\\x81\\\\xbb\\\\x00\\\\x80\\\\x00=\\\\x00\\\\xa0B\\\\xbd\\\\x00@\\\\xa8\\\\xbc\\\\x00\\\\xc0E\\\\xbc\\\\x00`L;\\\\x00\\\\x00?\\\\xbd\\\\x00 \\\\xab;\\\\x00\\\\xc0>\\\\xbc\\\\x00`p\\\\xbd\\\\x00\\\\xe0\\\\xf2\\\\xbc\\\\x00 \\\\xbf\\\\xbd\\\\x00 \\\\xfe=\\\\x00\\\\xc0#\\\\xbd\\\\x00\\\\x00\\\\xae\\\\xbc\\\\x00\\\\xc0\\\\x83<\\\\x00@\\\\xb7\\\\xbd\\\\x00\\\\x80\\\\xa6=\\\\x00 \\\\x04:\\\\x00\\\\x80\\\\x03=\\\\x00\\\\xe0|\\\\xbc\\\\x00\\\\xe0\\\\xdf<\\\\x00@S<\\\\x00`\\\\xf7<\\\\x00 =\\\\xbd\\\\x00 \\\\xa1\\\\xbc\\\\x00\\\\xa0\\\\x00<\\\\x00 6\\\\xbc\\\\x00`-=\\\\x00\\\\xa0P\\\\xbd\\\\x00\\\\x80\\\\x9f\\\\xbb\\\\x00`\\\\x11\\\\xbb\\\\x00\\\\xe0V\\\\xbd\\\\x00\\\\x00\\\\x1f\\\\xbb\\\\x00`\\\\xb7<\\\\x00\\\\x80u\\\\xbd\\\\x00 \\\\x8d\\\\xbd\\\\x00\\\\x00\\\\xc4\\\\xbc\\\\x00 3<\\\\x00\\\\xe0\\\\x86\\\\xbd\\\\x00\\\\x80D\\\\xbc\\\\x00\\\\x00/<\\\\x00@=\\\\xbc\\\\x00\\\\xc0=\\\\xbc\\\\x00\\\\xe0\\\\xae\\\\xbb\\\\x00\\\\x00Z\\\\xbd\\\\x00\\\\xa0\\\\x0f\\\\xbb\\\\x00@\\\\xed;\\\\x00\\\\x80\\\\xf1\\\\xbc\\\\x00\\\\xc0\\\\xb7\\\\xbb\\\\x00@\\\\x03:\\\\x00\\\\xe0\\\\x8d\\\\xbd\\\\x00`\\\\n\\\\xbd\\\\x00 \\\\xa6;\\\\x00@0=\\\\x00`L=\\\\x00\\\\xa0\\\\x80\\\\xbc\\\\x00\\\\x00u<\\\\x00 \\\\x1e=\\\\x00\\\\x00r<\\\\x00`\\\\xda\\\\xbb\\\\x00\\\\x00L\\\\xbd\\\\x00\\\\x80Y=\\\\x00@)<\\\\x00\\\\xe0\\\\xd6\\\\xbb\\\\x00\\\\x00\\\\xdb;\\\\x00\\\\x80.;\\\\x00\\\\x80A\\\\xbb\\\\x00 \\\\xf1<\\\\x00 ,=\\\\x00`n\\\\xbc\\\\x00\\\\xc0\\\\x07\\\\xbd\\\\x00\\\\xe0\\\\xa7<\\\\x00\\\\xe0\\\\xd8\\\\xbc\\\\x00\\\\x00\\\\x80<\\\\x00`\\\\x85\\\\xbd\\\\x00\\\\xa0\\\\x0e\\\\xbc\\\\x00\\\\xa0H\\\\xbd\\\\x00\\\\xe0\\\\x13=\\\\x00@\\\\xaf=\\\\x00\\\\xa0\\\\x83;\\\\x00\\\\x00\\\\xc3=\\\\x00\\\\x00\\\\x13\\\\xbc\\\\x00@\\\\xa2<\\\\x00\\\\xc0\\\\xc2\\\\xbc\\\\x00@r\\\\xbd\\\\x00\\\\xa0\\\\x19\\\\xbd\\\\x00`!\\\\xbc\\\\x00\\\\xa0=<\\\\x00\\\\xe0h\\\\xbb\\\\x00\\\\x80\\\\xe4\\\\xbc\\\\x00\\\\xc0\\\\xb0\\\\xbc\\\\x00\\\\xc0\\\\x11\\\\xbd\\\\x00@\\\\xf3;\\\\x00 \\\\x1e=\\\\x00\\\\xc0<\\\\xbd\\\\x00\\\\xa0_=\\\\x00\\\\x80\\\\xe9<\\\\x00`4\\\\xbd\\\\x00 K\\\\xbd\\\\x00\\\\xa0\\\\x9c\\\\xbc\\\\x00\\\\xe0\\\\x15<\\\\x00\\\\xc0\\\\xc5<\\\\x00 7\\\\xbc\\\\x00@\\\\xff\\\\xbc\\\\x00`\\\\xca\\\\xbb\\\\x00 \\\\xe4<\\\\x00\\\\x80\\\\x1f=\\\\x00\\\\x00\\\\xbd\\\\xbc\\\\x00`\\\\x17\\\\xbd\\\\x00\\\\x00\\\\x9b=\\\\x00\\\\x00M\\\\xb9\\\\x00`K=\\\\x00\\\\xc0\\\\xfe\\\\xbc\\\\x00`8\\\\xbd\\\\x00`I\\\\xbc\\\\x00\\\\xe0G\\\\xbd\\\\x00\\\\xc0\\\\x14\\\\xbc\\\\x00\\\\xc0\\\\xc1\\\\xbd\\\\x00\\\\x80\\\\x92\\\\xbd\\\\x00 \\\\xf6\\\\xbc\\\\x00\\\\xe0?<\\\\x00\\\\xe0\\\\x16\\\\xbd\\\\x00`\\\\x18:\\\\x00\\\\xa0d\\\\xbc\\\\x00 \\\\x16=\\\\x00@\\\\xa3<\\\\x00`\\\\xff<\\\\x00\\\\x00\\\\x0f\\\\xbd\\\\x00@\\\\\\\\\\\\xbc\\\\x00@\\\\xe4\\\\xbc\\\\x00`\\\\x11=\\\\x00@\\\\x82<\\\\x00\\\\xe0~\\\\xbc\\\\x00 }\\\\xba\\\\x00\\\\x80+=\\\\x00\\\\xa0\\\\xef<\\\\x00\\\\x80\\\\x8b\\\\xbc\\\\x00 \\\\xe5\\\\xba\\\\x00\\\\x00V\\\\xbb\\\\x00 \\\\xe7\\\\xbc\\\\x00 \\\\r\\\\xbb\\\\x00\\\\x00\\\\xe1\\\\xbb\\\\x00\\\\xa0e\\\\xbb\\\\x00`j<\\\\x00@\\\\x16\\\\xbc\\\\x00\\\\xc0\\\\x9b;\\\\x00 \\\\xe6:\\\\x00 \\\\xfc:\\\\x00\\\\x80\\\\x1c\\\\xbc\\\\x00@_<\\\\x00 \\\\xc7<\\\\x00\\\\xe07<\\\\x00@\\\\xb1<\\\\x00\\\\xa0*\\\\xbc\\\\x00 \\\\x93<\\\\x00\\\\x00\\\\x0c=\\\\x00`*<\\\\x00@6\\\\xbd\\\\x00 \\\\xbb<\\\\x00`\\\\xff\\\\xbc\\\\x00\\\\xe0B<\\\\x00\\\\x80\\\\x13=\\\\x00@\\\\xfd;\\\\x00`\\\\xf5\\\\xbc\\\\x00\\\\x00J\\\\xbd\\\\x00\\\\xc0\\\\xf2\\\\xbb\\\\x00\\\\xc0\\\\xfa;\\\\x00\\\\xe0\\\\xd5\\\\xbb\\\\x00@\\\\x18\\\\xbb\\\\x00\\\\x00\\\\x9f<\\\\x00\\\\xe0V\\\\xbd\\\\x00\\\\xe0\\\\x0f\\\\xbd\\\\x00\\\\x00^=\\\\x00\\\\x80\\\\xf6<\\\\x00 \\\\x89\\\\xbd\\\\x00\\\\xc0(=\\\\x00\\\\xe0!\\\\xbd\\\\x00\\\\xc0<\\\\xbd\\\\x00@0=\\\\x00\\\\x00\\\\xbe<\\\\x00\\\\x806\\\\xbd\\\\x00\\\\xe0\\\\x10\\\\xbd\\\\x00\\\\xe0\\\\xbf\\\\xbc\\\\x00 \\\\x01\\\\xbd\\\\x00\\\\x00G\\\\xbd\\\\x00\\\\x00\\\\xf8\\\\xbc\\\\x00 5=\\\\x00\\\\xe0\\\\x1c\\\\xbc\\\\x00@\\\\xdf<\\\\x00 \\\\xfd<\\\\x00\\\\xe0\\\\t\\\\xbd\\\\x00\\\\xc03\\\\xbc\\\\x00\\\\xc0\\\\x15\\\\xbd\\\\x00@^\\\\xbc\\\\x00\\\\xe0\\\\xcb\\\\xbb\\\\x00\\\\xc0\\\\xb2<\\\\x00\\\\xe0\\\\x95<\\\\x00\\\\xe0\\\\x1d\\\\xbc\\\\x00\\\\xa0%<\\\\x00\\\\xe0-=\\\\x00\\\\xc0\\\\xe3;\\\\x00\\\\xa0\\\\xc0\\\\xbc\\\\x00\\\\xc0B=\\\\x00 \\\\x1b\\\\xbc\\\\x00\\\\x80\\\\xfe\\\\xbc\\\\x00\\\\xe0*\\\\xbc\\\\x00@\\\\x1f=\\\\x00\\\\xa0E<\\\\x00\\\\xe0\\\\xdc\\\\xbc\\\\x00\\\\xc0\\\\x03=\\\\x00\\\\x80=\\\\xbd\\\\x00 \\\\\\\\\\\\xbc\\\\x00\\\\xe0\\\\x08<\\\\x00@)\\\\xbd\\\\x00\\\\xc0\\\\x8c<\\\\x00\\\\xa0\\\\xd4\\\\xbc\\\\x00\\\\x00\\\\x82\\\\xbd\\\\x00@\\\\x0b\\\\xbd\\\\x00\\\\x00\\\\x98\\\\xbc\\\\x00\\\\xc0\\\\xcb\\\\xbb\\\\x00 ;=\\\\x00\\\\xc0`=\\\\x00\\\\xe0\\\\xe5<\\\\x00\\\\xa05=\\\\x00\\\\xe0F\\\\xbd\\\\x00\\\\x80;;\\\\x00\\\\xa0!\\\\xbc\\\\x00 \\\\xad<\\\\x00`\\\\xb6<\\\\x00`\\\\'\\\\xbd\\\\x00\\\\xe0&=\\\\x00`\\\\x11\\\\xbd\\\\x00\\\\x80\\\\xe2\\\\xbc\\\\x00`\\\"\\\\xbd\\\\x00\\\\x00\\\\xac;\\\\x00\\\\x80\\\\x07;\\\\x00\\\\xc0\\\\xa8=\\\\x00`M\\\\xbd\\\\x00\\\\x00\\\\x82=\\\\x00\\\\xa0\\\\xb1;\\\\x00\\\\x00Y\\\\xbd\\\\x00 s\\\\xbc\\\\x00\\\\x00*=\\\\x00 \\\\xb7<\\\\x00\\\\xc0\\\\xa0\\\\xbb\\\\x00`&:\\\\x00 \\\\xb4<\\\\x00\\\\x00\\\\xf4<\\\\x00\\\\xe0\\\\xdb<\\\\x00`<<\\\\x00 -;\\\\x00\\\\xe0\\\\x98\\\\xbd\\\\x00\\\\x80\\\\x82=\\\\x00`\\\\x98\\\\xbb\\\\x00\\\\x80\\\\xfb<\\\\x00\\\\xa0\\\\x1b=\\\\x00\\\\xe0\\\\x9d\\\\xbc\\\\x00 \\\\x7f\\\\xbd\\\\x00\\\\xe0\\\\xcb\\\\xbc\\\\x00`\\\\x02=\\\\x00\\\\x00i\\\\xb9\\\\x00 \\\\xff<\\\\x00\\\\xa0\\\\x8e=\\\\x00@\\\\xf1<\\\\x00@d\\\\xbd\\\\x00\\\\xe0\\\\x81\\\\xbc\\\\x00\\\\xc0\\\\x8a\\\\xbd\\\\x00@\\\\xf1\\\\xbc\\\\x00\\\\xc0\\\\x0f\\\\xbc\\\\x00@_<\\\\x00\\\\xc0\\\\'\\\\xbd\\\\x00\\\\xe0/\\\\xbc\\\\x00`V\\\\xbc\\\\x00 \\\\xa1<\\\\x00\\\\xa0\\\\xe6\\\\xba\\\\x00\\\\xa0\\\\xc4<\\\\x00`\\\\x81\\\\xbc\\\\x00\\\\xc0\\\\xb9\\\\xbd\\\\x00\\\\x80N=\\\\x00\\\\x00L=\\\\x00\\\\x80t=\\\\x00\\\\xa0\\\\xa3<\\\\x00\\\\xe0\\\\x02\\\\xbd\\\\x00@v\\\\xbd\\\\x00\\\\xc0\\\\x0c=\\\\x00\\\\xc0$\\\\xbb\\\\x00 \\\\x0b<\\\\x00 \\\\xf0:\\\\x00\\\\xe0\\\\xc6\\\\xbc\\\\x00\\\\xa0<<\\\\x00@\\\\xb3<\\\\x00@Q<\\\\x00\\\\x00R=\\\\x00\\\\xc0%<\\\\x00\\\\x00\\\\xa0<\\\\x00`M=\\\\x00\\\\x00\\\\xcd\\\\xbb\\\\x00\\\\x00H\\\\xbb\\\\x00`\\\\x10\\\\xbd\\\\x00@\\\\xd2\\\\xbb\\\\x00@R\\\\xbd\\\\x00\\\\x000<\\\\x00@\\\\x95\\\\xbc\\\\x00\\\\x80\\\\x9a;\\\\x00\\\\xc0\\\\x8f\\\\xbc\\\\x00 \\\\xae\\\\xbc\\\\x00\\\\x80k<\\\\x00`\\\\xa7;\\\\x00\\\\xc0B;\\\\x00@\\\\x07\\\\xbc\\\\x00\\\\xe0,<\\\\x00\\\\x00]\\\\xbc\\\\x00 \\\\x82<\\\\x00 \\\\xf3\\\\xbc\\\\x00`\\\\xc8<\\\\x00\\\\x00 =\\\\x00@\\\\xb8<\\\\x00 S\\\\xbc\\\\x00\\\\x80v;\\\\x00@\\\\x90\\\\xbd\\\\x00`s<\\\\x00 \\\\xb5\\\\xba\\\\x00 1\\\\xb9\\\\x00\\\\xe0\\\\x9e<\\\\x00\\\\xc0Z=\\\\x00\\\\x80\\\\xd9;\\\\x00 %<\\\\x00`j\\\\xbd\\\\x00\\\\x80\\\\xb6\\\\xbc\\\\x00\\\\x80d\\\\xbd\\\\x00\\\\xe0D=\\\\x00@\\\\x0e=\\\\x00 \\\\x9a=\\\\x00\\\\x00\\\\x9c\\\\xbd\\\\x00\\\\x00\\\\x0e\\\\xbc\\\\x00\\\\xe0\\\\'=\\\\x00\\\\xc0v=\\\\x00\\\\x80\\\\t<\\\\x00@R=\\\\x00 \\\\xc7;\\\\x00\\\\xe0\\\\x11;\\\\x00`\\\\xf6<\\\\x00\\\\xa0R<\\\\x00\\\\xc0;<\\\\x00\\\\xc0L\\\\xbc\\\\x00\\\\x80\\\\xa1<\\\\x00@P:\\\\x00\\\\x80\\\\xd5\\\\xbc\\\\x00\\\\x801<\\\\x00\\\\xa0\\\\xa5\\\\xbc\\\\x00\\\\x00\\\\x1f\\\\xbd\\\\x00\\\\x80/=\\\\x00\\\\xa0n<\\\\x00\\\\x00(=\\\\x00@Q<\\\\x00\\\\xa0\\\\x98<\\\\x00\\\\x00B=\\\\x00\\\\xe0\\\\x85\\\\xbc\\\\x00\\\\xe0,<\\\\x00\\\\xe0g\\\\xbd\\\\x00@\\\\x84=\\\\x00\\\\xc0\\\\x8b=\\\\x00 \\\\x8f;\\\\x00`%\\\\xbc\\\\x00\\\\x00\\\\x10=\\\\x00\\\\xa0\\\\xde\\\\xbc\\\\x00 T<\\\\x00@\\\\x1d=\\\\x00\\\\x00\\\\x04=\\\\x00`\\\\x8d;\\\\x00\\\\x00%=\\\\x00\\\\xe0\\\\xd4<\\\\x00\\\\x80\\\\x83\\\\xbd\\\\x00\\\\xc0\\\\n\\\\xbc\\\\x00\\\\x00\\\\xba<\\\\x00\\\\xa0>=\\\\x00\\\\xa0r<\\\\x00@\\\\x00=\\\\x00\\\\xa0p=\\\\x00\\\\xe0\\\\x1f=\\\\x00 \\\\xb4\\\\xbc\\\\x00 |\\\\xbc\\\\x00 \\\\xad<\\\\x00\\\\xc0\\\\xcf\\\\xba\\\\x00\\\\x00A\\\\xbc\\\\x00\\\\x80]=\\\\x00\\\\xc0G\\\\xbc\\\\x00`\\\\xa5\\\\xba\\\\x00\\\\xe0Z=\\\\x00\\\\xc0B\\\\xbd\\\\x00\\\\xa0\\\\x04\\\\xbd\\\\x00\\\\x00\\\\x93<\\\\x00\\\\xa0e\\\\xbb\\\\x00\\\\xe0g\\\\xbd\\\\x00\\\\xa0\\\\x04=\\\\x00\\\\xa0\\\\xd6<\\\\x00\\\\xe0\\\\n=\\\\x00\\\\xa01\\\\xbb\\\\x00\\\\x80\\\\x8e<\\\\x00\\\\x00g<\\\\x00 \\\\'=\\\\x00`);\\\\x00`\\\\xaf\\\\xbc\\\\x00 \\\\xf9<\\\\x00`p=\\\\x00\\\\x80\\\\xc2\\\\xbc\\\\x00\\\\x00\\\\x9c\\\\xbb\\\\x00\\\\x803\\\\xbd\\\\x00`\\\\xa6<\\\\x00`*=\\\\x00 \\\\x14\\\\xbc\\\\x00`\\\\x90\\\\xbc\\\\x00\\\\xe0\\\\x83\\\\xbc\\\\x00\\\\xa0\\\\xe3\\\\xbc\\\\x00\\\\xc0!\\\\xbd\\\\x00\\\\xe0\\\\x05=\\\\x00@#=\\\\x00\\\\x808<\\\\x00\\\\x800;\\\\x00\\\\xc0\\\\xb2\\\\xbc\\\\x00\\\\x00\\\\x93<\\\\x00\\\\x80\\\\x9c;\\\\x00\\\\xc0!\\\\xbb\\\\x00 \\\\xf7;\\\\x00\\\\xc0\\\\x85\\\\xbc\\\\x00\\\\xe03\\\\xbc\\\\x00\\\\xc0\\\\xba\\\\xbd\\\\x00@\\\\xb0\\\\xbc\\\\x00\\\\x80\\\\xba\\\\xbc\\\\x00\\\\x80K\\\\xbc\\\\x00@\\\\x98\\\\xbd\\\\x00 D=\\\\x00\\\\xe0\\\\x9c<\\\\x00@\\\\x03=\\\\x00`\\\\x82<\\\\x00 H<\\\\x00\\\\x00\\\\x14\\\\xbd\\\\x00\\\\xc0\\\\xf7;\\\\x00\\\\x00\\\\x15\\\\xbb\\\\x00\\\\x00\\\\xda<\\\\x00\\\\xa0,<\\\\x00@\\\\x85\\\\xbc\\\\x00\\\\xc0\\\\x16\\\\xbc\\\\x00`\\\\xf7\\\\xbc\\\\x00`\\\\xb2<\\\\x00`\\\\xf2;\\\\x00\\\\x80\\\\xa7\\\\xbc\\\\x00@;\\\\xbd\\\\x00`\\\\x9a\\\\xbc\\\\x00\\\\x805=\\\\x00`\\\\x06\\\\xbd\\\\x00\\\\x00\\\\xb3\\\\xbc\\\\x00`\\\\xa0;\\\\x00\\\\xe0\\\\xb8\\\\xbc\\\\x00\\\\x80\\\\x80\\\\xbc\\\\x00\\\\xc0\\\\x9a=\\\\x00\\\\x80\\\\xcd<\\\\x00\\\\xa0\\\\x12\\\\xbc\\\\x00\\\\xe0\\\\xad;\\\\x00\\\\x80G\\\\xbb\\\\x00`\\\\x93\\\\xbc\\\\x00\\\\x00v<\\\\x00\\\\xc0\\\\x0f;\\\\x00@N=\\\\x00\\\\xa0~\\\\xbc\\\\x00\\\\xc0\\\\x17\\\\xbc\\\\x00\\\\xe0J\\\\xbc\\\\x00\\\\x00\\\\xa0;\\\\x00\\\\xe0,;\\\\x00`\\\\n\\\\xbc\\\\x00\\\\x00\\\\x8b;\\\\x00`\\\\x96\\\\xbc\\\\x00@\\\\xfa\\\\xbc\\\\x00\\\\x80|\\\\xbb\\\\x00`$\\\\xbc\\\\x00\\\\xc0f\\\\xbc\\\\x00\\\\xe05\\\\xbd\\\\x00\\\\x00v\\\\xbd\\\\x00`\\\\x00\\\\xbd\\\\x00\\\\xa0\\\\xc4<\\\\x00 \\\\xde\\\\xbc\\\\x00`\\\\xb1\\\\xbc\\\\x00\\\\xa0\\\\x04=\\\\x00\\\\x80\\\\xf2\\\\xbb\\\\x00\\\\xc0\\\\x1e\\\\xbd\\\\x00\\\\xc0J\\\\xbc\\\\x00\\\\x00\\\\xf7\\\\xbc\\\\x00\\\\xe0\\\\xc2<\\\\x00 6=\\\\x00@\\\\x1b\\\\xbd\\\\x00\\\\xc0\\\\xd3<\\\\x00 \\\\xfd;\\\\x00\\\\xa0\\\\x11\\\\xbd\\\\x00\\\\xe0>;\\\\x00\\\\x00\\\\x9d<\\\\x00@+=\\\\x00\\\\xe0\\\\xf8\\\\xbc\\\\x00\\\\xc0\\\\xb8\\\\xbb\\\\x00@X<\\\\x00\\\\xc0\\\\xd5<\\\\x00\\\\xa0v=\\\\x00\\\\x80\\\\xa8;\\\\x00\\\\xe0\\\\x1c<\\\\x00`\\\\n\\\\xbb\\\\x00@\\\\t\\\\xbd\\\\x00`.\\\\xbd\\\\x00\\\\x00\\\\x04\\\\xbd\\\\x00\\\\x80\\\\'=\\\\x00\\\\xc0\\\\x94<\\\\x00\\\\x80,\\\\xba\\\\x00@\\\\xf7;\\\\x00 F\\\\xbc\\\\x00`\\\\xf5\\\\xbc\\\\x00@\\\\xa2<\\\\x00\\\\x80\\\\xf9<\\\\x00\\\\x80G\\\\xbc\\\\x00\\\\xa0#<\\\\x00 n\\\\xbc\\\\x00 \\\\x10<\\\\x00`j<\\\\x00\\\\xe0\\\\xb4\\\\xbc\\\\x00\\\\xe0\\\\x98<\\\\x00`\\\\xb29\\\\x00 \\\\xab\\\\xbc\\\\x00\\\\xa0\\\\x10<\\\\x00\\\\x00\\\\xe5\\\\xbc\\\\x00\\\\xe0C=\\\\x00\\\\xc0\\\\xea<\\\\x00`b\\\\xbc\\\\x00\\\\xe0B=\\\\x00\\\\xe0M=\\\\x00\\\\x00q\\\\xbc\\\\x00`9=\\\\x00\\\\xe0\\\\x98\\\\xbc\\\\x00 \\\\xbb\\\\xbc\\\\x00\\\\xa0Q=\\\\x00\\\\xe0B<\\\\x00\\\\x80\\\\x8e<\\\\x00\\\\xe0\\\\x04\\\\xbd\\\\x00 \\\\xd4<\\\\x00 f<\\\\x00@\\\\xc4<\\\\x00\\\\xc0H<\\\\x00\\\\x00\\\\x10=\\\\x00\\\\xa00\\\\xbd\\\\x00@\\\\xd3\\\\xbc\\\\x00\\\\xc0?\\\\xbc\\\\x00\\\\xc0\\\\xa2<\\\\x00\\\\x00\\\\xd2\\\\xbc\\\\x00@\\\\xcc\\\\xbc\\\\x00\\\\x80&=\\\\x00\\\\xa0\\\\xb4<\\\\x00\\\\xe07=\\\\x00\\\\x80\\\\xf3\\\\xbb\\\\x00`\\\\xb0\\\\xbd\\\\x00@\\\\x97\\\\xbc\\\\x00`\\\\xd3<\\\\x00\\\\xe0\\\\xbd\\\\xbc\\\\x00\\\\x00\\\\xc0:\\\\x00\\\\xa0\\\\x0f\\\\xbc\\\\x00\\\\x80:\\\\xbc\\\\x00\\\\x00\\\\x9a<\\\\x00`B<\\\\x00 A=\\\\x00 %\\\\xbb\\\\x00 -<\\\\x00\\\\x00\\\\x1e\\\\xbd\\\\x00`]<\\\\x00@\\\\x9f:'\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"bson_int8_embedding\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 20,\n        \"samples\": [\n          \"b'\\\\x03\\\\x00J\\\\x1a\\\\xdf\\\\xbe\\\\x1d\\\\xd1\\\\x18\\\\x14\\\\xcc8\\\\xfa\\\\x00J\\\\xe3\\\\xfc\\\\xf7\\\\x1f\\\\xfc\\\\xea\\\\xed\\\\xfa\\\\xfd\\\\xea(\\\\x18\\\\xfa\\\\xbc\\\\xe0\\\\x03\\\\xf8\\\\x00\\\\x1b/!\\\\xcb\\\\xf1\\\\xdc\\\\x02\\\\xf2\\\\xfb\\\\x1a\\\\xeb\\\\xf9\\\\x17\\\\xe2\\\\xe3\\\\x0c\\\\xe1\\\\xf5\\\\xec\\\\x1a\\\\xc7/\\\\xd9\\\\xd7\\\\xe7Q\\\\xbe6\\\\x80\\\\xcb\\\\xcf`C\\\\xe8\\\\xf4)\\\\x0fZ\\\\xf5\\\\xd45\\\\x14G\\\\xef\\\\xab-\\\\x1f\\\\x13,\\\\x06\\\\xf4\\\\x11\\\\xed\\\\x11\\\\x00\\\\xfb\\\\xf5\\\\xe7\\\\xec\\\\xef\\\\x18\\\\xae%\\\\x0e\\\\xe2\\\\xd9\\\\xf8\\\\xd7\\\\x1a\\\\xd8\\\\x06\\\\x06\\\\xd2\\\\xe66,\\\\r\\\\xf9\\\\xf7\\\\xe11\\\\x0f\\\\xde\\\\xc7\\\\xf4\\\\xfc\\\\x04\\\\x1f\\\\xea\\\\xf6 \\\\xf4\\\\x04\\\\xfb\\\\x01\\\\x06\\\\xec\\\\xc6&\\\\xdd\\\\x18\\\\xe9\\\\xfe\\\\xe9\\\\xf3\\\\x13\\\\xc0\\\\xcd,\\\\xe3\\\\xf8S\\\\xd8\\\\t\\\\x0b%\\\\x19\\\\xea\\\\xd6\\\\x05\\\\x17\\\\x19\\\\xf6\\\\xd4\\\\xfb\\\\x9e\\\\x12\\\\x0b\\\\t\\\\xd2\\\\xe8\\\\x19\\\\\\\\R-95\\\\x06Z\\\\xe4\\\\x14\\\\xe5\\\\xf5\\\\xf5\\\\xf1\\\\xdc\\\\x12\\\\xde*\\\\x18\\\\xbd\\\\xde\\\\x15\\\\x1a\\\\xb3\\\\xff\\\\xcb\\\\x19\\\\x16\\\\xbe\\\\x1a\\\\xc3\\\\x04\\\\xe0\\\\x19\\\\xf0.\\\\xed\\\\x04\\\\xbf\\\\xf0\\\\x19\\\\x00\\\\x19\\\\xd0\\\\x11\\\\x1dK\\\\xff\\\\xc6\\\\xc0Z\\\\x9e\\\\xbd\\\\x03\\\\xf2\\\\xf6\\\\x06\\\\xf7\\\\x10\\\\x02\\\\x10*\\\\xfa\\\\xe4\\\\x04\\\\t\\\\t\\\\xfe\\\\n\\\\x051G\\\\xff\\\\x19d\\\\x1b\\\\x14\\\\xe5\\\\x0c\\\\xd6\\\\xd7\\\\xe3\\\\'9\\\\r\\\\t\\\\x1aZ\\\\n\\\\xfd\\\\x08\\\\x1d\\\\xeb/%(\\\\xbd,\\\\xefK\\\\x02\\\\x13\\\\xb1R\\\\xe1\\\\xff\\\\xa7>8\\\\x0e\\\\xe8\\\\xd3\\\\x17\\\\xc7\\\\xc0$\\\\x0f\\\\xd4\\\\x06\\\\t\\\\xf6\\\\x00\\\\x03@\\\\x0f\\\\x1c\\\\xe8\\\\xfa:\\\\x13\\\\x11\\\\xf5\\\\xc9\\\\xf5e)\\\\xe4\\\\x04I\\\\'\\\\xe5\\\\xf3\\\\x08\\\\x04\\\\x16\\\\x04\\\\xf9\\\\xfe\\\\xd9\\\\xf1\\\\r\\\\xdd.\\\\xf5\\\\x08\\\\xfa\\\\x01\\\\xfb\\\\xc1\\\\x14\\\\x00\\\\xc4\\\\x10\\\\x02\\\\xa8\\\\x08\\\\xde\\\\xff\\\\x18\\\\x01\\\\xf4\\\\x05\\\\x0e\\\\xfe\\\\t\\\\x1d\\\\x00\\\\xbb\\\\xe7\\\\xb8\\\\xd2\\\\xef\\\\x1d\\\\xaa,\\\\xfc\\\\xf8\\\\x16\\\\xfb\\\\xf4\\\\xf6\\\\x00\\\\xfd\\\\x1a\\\\x08\\\\xdb\\\\xd6\\\\xb2\\\\xd9\\\\xde\\\\xca\\\\x025\\\\t\\\\xb15\\\\xb5\\\\xfd\\\\x1a\\\\xc5\\\\x1e\\\\xe1\\\\xac\\\\xf8\\\\xfb\\\\xc0\\\\xd5\\\\xe2\\\\x1e\\\\x0e\\\\x10\\\\x07(\\\\x06\\\\xe7\\\\xe2\\\\x17\\\\x19\\\\xfb\\\\xeb\\\\xf2\\\\xff-\\\\xf7\\\\xb6\\\\x1f\\\\x89\\\\x0c\\\\x02\\\\xf3\\\\xf8\\\\xee\\\\xe6\\\\xa9\\\\xeb\\\\xdc\\\\x0c&\\\\xd2$\\\\xe5\\\\x10\\\\t\\\\xe9\\\\xe8\\\\xf1\\\\x17\\\\x08\\\\x1f\\\\xa6\\\\x13\\\\x1c\\\\xe1\\\\x04\\\\xed\\\\x15\\\\xe7\\\\x14\\\\xf1\\\\xf6\\\\xff\\\\xcd\\\\xdc\\\\x13\\\\xdd\\\\'\\\\xf1\\\\xfd\\\\x12\\\\x13\\\\x1a\\\\x1d\\\\xe9\\\\x02/\\\\x1e\\\\xed\\\\x01\\\\xff\\\\x16\\\\x08\\\\x03\\\\xe0\\\\xd8\\\\xf7\\\\'\\\\xf4\\\\xd9\\\\x04\\\\xe3\\\\xd1\\\\xef\\\\xd7\\\\xfef\\\\xd9\\\\xf0\\\\xfa\\\\xa7#\\\\x1e\\\\t\\\\xf7\\\\x1c\\\\x15\\\\x15\\\\xc0\\\\xe7\\\\xb3%\\\\xaa\\\\xf9\\\\xdb\\\\t\\\\xf6\\\\xe6\\\\x1f\\\\xd8!\\\\xbf/\\\\xbb\\\\xde\\\\xda\\\\xf8\\\\x07\\\\xe2\\\\xb1\\\\xfd\\\\x00\\\\xd7#\\\\xe5\\\\x0e\\\\x0b\\\\x04\\\\x0e\\\\x15\\\\xf4\\\\xe5\\\\xca\\\\xfc\\\\xc7\\\\x19\\\\xcd\\\\x06\\\\xdb\\\\xf9\\\\xf0\\\\x1d\\\\xcc\\\\x1c%\\\\xe4\\\\xd2:\\\\xe3\\\\xbc,\\\\x12+5\\\\xd01\\\\xf6\\\\xe0\\\\xe0\\\\xed\\\\xfc?\\\\x13\\\\n\\\\x1a&\\\\x01j\\\\x93d\\\\xec\\\\xe1\\\\xf7\\\\xc3\\\\xc4A;\\\\xed\\\\xde\\\\x15\\\\xe7\\\\x0e\\\\x19\\\\xf1\\\\x0f!\\\\xf9\\\\xec\\\\xff\\\\xfc\\\\xe3\\\\xf4;\\\\xca\\\\x19\\\\xa9\\\\xcf\\\\xfd\\\\xf3\\\\x00\\\\xe2!\\\\r\\\\x0e\\\\xd1\\\\xf8\\\\x1c\\\\xf5\\\\xea\\\\xe47\\\\xf8D\\\\x0b\\\\xfd\\\\xb33\\\\x80\\\\xb5\\\\xe6\\\\xe3 %\\\\xda\\\\xee\\\\xfd\\\\x08\\\\xdc\\\\xdf\\\\xdc\\\\x1f4\\\\xd1\\\\xf1\\\\xc5\\\\x1a\\\\x1a\\\\xde\\\\xa6\\\\xd2\\\\xc8\\\\xec\\\\x08\\\\xdb2\\\\xa3\\\\xdc\\\\xd1\\\\xec\\\\xff\\\\xc9\\\\x06\\\\x14\\\\x1cK\\\\xd5\\\\x03\\\\x1b\\\\xe5\\\\x15\\\\xfb\\\\x03\\\\x07\\\\x12\\\\n\\\\xec\\\\x0b\\\\x1b\\\\xf0\\\\xdf\\\\xfd\\\\x05\\\\x1f\\\\xe7\\\\xfa\\\\xfb\\\\xf7L\\\\xcf\\\\x14\\\\x179\\\\xd0\\\\xe4\\\\n$.\\\\x19\\\\xf8\\\\x12\\\\xf2\\\\x16\\\\xfa\\\\xef\\\\t\\\\xfb\\\\xe0\\\\x1d\\\\xda\\\\xfb\\\\x11\\\\xfe\\\\xea\\\\n\\\\xd9\\\\x19\\\\xe3\\\\x19\\\\xce\\\\xfd#\\\\x7f\\\\xd7\\\\x7f\\\\xfb\\\\xe1\\\\xe9\\\\xb8\\\\x1e\\\\xec\\\\x04\\\\xe9+\\\\xf0\\\\xf0M\\\\'\\\\x1a\\\\xd3\\\\xe8#6\\\\xea\\\\xe0 \\\\x00`A)\\\\xd7\\\\xd4\\\\xbf\\\\x06\\\\x00/\\\\xe7\\\\xe5\\\\xda\\\\x15-\\\\xdf\\\\x00)\\\\xd5\\\\xf6\\\\xd9%\\\\x05\\\\xff2\\\\x17\\\\xfb9\\\\xf3\\\\x9c\\\\r\\\\x06\\\\x9d\\\\xee\\\\xd6(\\\\x0b\\\\xe6\\\\xec\\\\x07\\\\x16V\\\\xf4\\\\xd3\\\\xe0\\\\xdc\\\\x07\\\\x00\\\\x12\\\\xf0\\\\x16\\\\xab\\\\xd8\\\\x14;\\\\xeb/\\\\xfe\\\\x07\\\\xb4D\\\\x1e\\\\xe8\\\\xdf\\\\x1c,\\\\xf0\\\\x92\\\\xea\\\\xe4\\\\xeb\\\\x16&\\\\xf6)\\\"\\\\x18D\\\\x04H\\\\x0f\\\\xcb\\\\x0c\\\\x18\\\\xe2\\\\x14\\\\xf3\\\\xea\\\\x07\\\\xe9\\\\xd9\\\\t\\\\x19\\\\xfa\\\\x03\\\\x13\\\\x1b\\\\x1c\\\\t\\\\xb1\\\\x1d\\\\xed\\\\x07\\\\xd5\\\\xd0+;\\\\x1d\\\\xee\\\\xeaF\\\\xcd\\\\xe7\\\\xf5\\\\xfb#\\\\x08\\\\xfd 2\\\\xfd\\\\xf1\\\\xd7+\\\\xea\\\\xeb\\\\x11\\\\xde\\\\x1d\\\\x9a=?\\\\xe4\\\\x01%\\\\x1c\\\\xf7\\\\x15\\\\t\\\\x12\\\\x1a\\\\xb9\\\\xbe\\\\xdf^<\\\\xba\\\\xbf\\\\xf3Q\\\\xea$\\\\x04\\\\xd8\\\\xee\\\\x1c\\\\xea(\\\\xdc\\\\xcc\\\"\\\\xef\\\\x16\\\\xe2$\\\\xe1\\\\xd8\\\\xeb\\\\xbd\\\\xee\\\\xec\\\\x12\\\\x1e-\\\\x1a5\\\\xe1\\\\xfa(\\\\x0f\\\\x17\\\\xf4\\\\xe8\\\\xbf]\\\\xcd\\\\xeb\\\\xb9\\\\xd9\\\\x0b\\\\xde\\\\x0e\\\\x17\\\\xb9\\\\xd2r\\\\x03\\\\':\\\\xce\\\\xda\\\\x19>9.\\\\x00\\\\xfb\\\\xfe\\\\xc4\\\\x085\\\\xd9\\\\xa6\\\\xe603\\\\xfb\\\\xf3\\\\xe0\\\\x17\\\\xe57\\\\x07\\\\xf5\\\\xf2\\\\xff\\\\x0b\\\\x01\\\\xdb\\\\x15\\\\xe6`\\\\xf6\\\\xce\\\\xfc\\\\xeb\\\\x00\\\\xdb, T\\\\xf7\\\\x14\\\\x04\\\\x06\\\\x16\\\\t\\\\xf7\\\\xf1\\\\xc0\\\\'\\\\xf4\\\\n\\\\x1f\\\\xfb\\\\x02\\\\x12\\\\xee\\\\xfa\\\\xfd\\\\x04$+\\\\xe30\\\\xe3$\\\\xe0 \\\\xd23\\\\xdb\\\\xe8\\\\x0c\\\\x1d\\\\xf4\\\\x1f\\\\x01\\\\x804U\\\\x0c.\\\\x07\\\\xca\\\\x9e\\\\xe7G\\\\xcb\\\\xde\\\\xba\\\\'\\\\t\\\\x08\\\\x9c\\\\xef\\\"\\\\xbc\\\\x00\\\\xda\\\\xbe\\\\x10\\\\xf9\\\\xf5\\\\x01\\\\xcf\\\\x06\\\\xe5\\\\xee'\",\n          \"b'\\\\x03\\\\x00&\\\\x1d\\\\xd5\\\\xda\\\\x08\\\\xdd\\\\x02\\\\xe7\\\\xb49&\\\\x1d\\\\x08\\\\xdc\\\\x19\\\\x08\\\\x03\\\\x08\\\\x0b\\\\xeb\\\\x11\\\\x03\\\\xe3\\\\x99&\\\\xc6\\\\x8a \\\\xf9\\\\x03\\\\xf6Q\\\\xf5\\\\x11\\\\x13\\\\xf7\\\\xd1\\\\x1c$\\\\xe7\\\\r\\\\xdf\\\\xf7\\\\xeb\\\\xcc\\\\x0f\\\\x0b\\\\x00\\\\'\\\\xa5\\\\xde\\\\xf9\\\\xf8\\\\xe2\\\\xde\\\\xff\\\\x0b\\\\xb5\\\\xec\\\\xee\\\\x0e\\\\x0eD;\\\\xf3\\\\xdf\\\\xf6\\\\x10\\\\xf9\\\\x05\\\\x1e\\\\xfa\\\\t\\\\xc8 \\\\xdf\\\\x12\\\\x0c\\\\xef\\\\x00\\\\xcd\\\\x17\\\\xe5\\\\xab\\\\x1c\\\\xd7\\\\xf7\\\\xff\\\\xf1\\\\xe0\\\\xe3`\\\\x00\\\\xd8\\\\xb8\\\\xee\\\\x1b\\\\xec\\\\x1f\\\\xe7\\\\t\\\\xbe\\\\xf2\\\\xf8\\\\xf10M\\\\x0b\\\\x00\\\\xf0\\\\xd6$\\\\x1d\\\\xee\\\\x1f\\\\x0f\\\\xd8I\\\\xf4%\\\\xdf\\\\x00\\\\x02\\\\x07\\\\xff\\\\t\\\\xf7\\\\xe9\\\\xda\\\\x14\\\\xf3C\\\\xcc\\\\xd5\\\\xd3\\\\xf9\\\\xf4;\\\\x07\\\\xe1\\\\x12\\\\xd0\\\\xd8<\\\\xe7\\\\xfe\\\\x19%\\\\xfa\\\\xca\\\\x00\\\\x0c\\\\xcdJ*5\\\\xd6\\\\x0fIL)\\\\x12\\\\xfe;;\\\\xee\\\\x07-\\\\x0b?#+\\\\xc5\\\\xdb\\\\xfc\\\\xc7\\\\xe3Z\\\\x02\\\\xe9\\\\x03\\\\xb54\\\\x00\\\\x1a\\\\xa8\\\\xeb\\\\xb9\\\\x181\\\\xa5\\\\x189\\\\x89\\\\x18#\\\\xfb\\\\x15\\\\xff\\\\xe2\\\"\\\\x15\\\\xfb\\\\x06\\\\xe0\\\\x00\\\\xfc\\\\x0b\\\\t\\\\xfa\\\\x02\\\\xba\\\\x0c\\\\xda\\\\xd4\\\\xf5\\\\xb4\\\\xc3\\\\xeb\\\\x13\\\\x07\\\\xee\\\\xe5\\\\xe7)\\\\x1e\\\\xd0\\\\xf88\\\\xf2.\\\\x1a<U\\\\xe1\\\\xeaL\\\\'\\\\x06\\\\x11\\\\x0f8\\\\x02\\\\x1cw:&\\\\xf7\\\\x16?\\\\x1d\\\\r\\\\x16\\\\x1b\\\\xf0I\\\\x141\\\\xf88\\\\xbeHR\\\\xf1\\\\xd16\\\"<\\\\x17\\\\x14\\\\xe8\\\\xe9\\\\x17.\\\\xe7\\\\x15\\\\xd2\\\\xef\\\\x16\\\\x12\\\\xef\\\\x196\\\\x05\\\\xfe%1\\\\xfa(\\\\x1eC\\\\xe7\\\\x0f\\\\x00\\\\'\\\\xeb\\\\xd2\\\\x1a\\\\xfd\\\\xf1\\\\x085\\\\x03\\\\xec\\\\xf58\\\\x17\\\\xf1\\\\xef\\\\x00\\\\xac\\\\xdf\\\\xf7\\\\xd3\\\\xff\\\\xcb\\\\xec\\\\xd4\\\\xba\\\\xf4\\\\x17l\\\\xc1\\\\xef6\\\\x03\\\\xa4\\\\xe0\\\\xeb\\\\xf0\\\\xeb\\\\xdc\\\\xfb\\\\xee\\\\t\\\\xdb\\\\x00\\\\x0f\\\\xe7\\\\xd1\\\\xe9\\\\xa7\\\\r\\\\xe6L\\\\xc7\\\\x9d\\\\x17\\\\xd0\\\\xf3\\\\xf9\\\\x05\\\\xcb+:\\\\xde\\\"w:\\\\x11\\\\xaa\\\\x1f\\\\xc2\\\\x14K\\\\xdc\\\\xceK\\\\xee\\\\x1c\\\\xe2\\\\xf1\\\\xf6\\\\xfc\\\\xf7\\\\x17\\\\xfa\\\\xae\\\\xff\\\\xf1\\\\xe5\\\\xfe\\\\xfd\\\\x05E\\\\xf7\\\\xef\\\\x18/\\\\x19\\\\xed\\\\xe5\\\\xdd\\\\xee\\\\xff,\\\\xe9\\\\xb1\\\\xec\\\\xe1)\\\\x01\\\\x06\\\\xf6\\\\xf0\\\\xd7\\\\x02\\\\xf3\\\\x12\\\\x15\\\\x0e\\\\xef\\\"\\\\xdd\\\\x00\\\\xe2\\\\x11\\\\x1a\\\\xd8\\\\xd6#\\\\x16\\\\x19\\\\xf5\\\\xd7\\\\x15\\\\x1b4\\\\x03\\\\x02\\\\x14\\\\xe6\\\\xfe\\\\xe3 \\\\x1f\\\\xbd\\\\x0b\\\\xb3\\\\xff\\\\xe9\\\\xf9\\\\x05\\\\r%\\\\xb7\\\\xfe\\\\xe6\\\\xda\\\\xd4\\\\xf6\\\\r\\\\xdf\\\\xff\\\\x07\\\\x10\\\\x04+\\\\xdd\\\\n\\\\t\\\\xd8\\\\x12\\\\xe8\\\\xd6\\\\t}\\\\xe9\\\\xc6#\\\\xb1\\\\xea\\\\x00\\\\x1e\\\\xe64\\\\x1e\\\\xf5\\\\xdc\\\\xed\\\\x04\\\\xe7\\\\xfe\\\\x0b\\\\x0e\\\\t\\\\xe0!\\\\xfb\\\\xd7\\\\x80\\\\xf4\\\\xad+\\\\xdb \\\\xfa2\\\\x06\\\\xe6\\\\xc5\\\\xeb\\\\xe6\\\\xea\\\\xed\\\\xcd\\\\x0b\\\\x1b!\\\\x02&\\\\x06*\\\\xe2\\\\x05\\\\x0e\\\\xee\\\\xf8\\\\xe3\\\\xf5\\\\xfe\\\\x1c\\\\xfd?\\\\xef\\\\xd1\\\\xf7\\\\xff\\\\xcd\\\\xcb\\\\x16\\\\x00/\\\\x10\\\\x06-\\\\x028\\\\x00\\\\x97\\\\x05\\\\xe0\\\\xc8\\\\xa8\\\\x1c\\\\xc8\\\\x17\\\\x0f\\\\xed\\\\xfe\\\\xee\\\\xea\\\\xf3\\\\xda\\\\xd2\\\\xfc\\\\x00\\\\x03\\\\xf0\\\\xec\\\\x1f\\\\x12\\\\xdb\\\\xe7\\\\x00\\\\xf8\\\\x00\\\\xdc(\\\\xb0\\\\xec\\\\xe9\\\\xe1\\\\xe2(\\\\x1a\\\\xd9\\\\xf4\\\\xea\\\\t\\\\x043\\\\x00\\\\xf0\\\\xee\\\\xe1\\\\x16\\\\xd6\\\\xda\\\\xd0\\\\x11\\\\xf1\\\\xff\\\\x04\\\\x18\\\\xf0\\\\x1e\\\\xe14\\\\x0f%\\\\xff\\\\x1d\\\\xf0\\\\xff\\\\xef\\\\x1a<\\\\xfc\\\\x00\\\\x1c\\\\xbf\\\\x04E\\\\xfe\\\\xf1\\\\x01\\\\x18\\\\xb3\\\\xc0\\\\xc4\\\\xc2\\\\xe2\\\\x9f\\\\x03\\\\xa2\\\\x0c\\\\t\\\\xfb\\\\xd7\\\\xd3\\\\xff\\\\xd8\\\\x04\\\\xfc\\\\xef\\\\xec\\\\xce\\\\xef\\\\x0e\\\\xf3+\\\\x16\\\\r\\\\x12\\\\xd2\\\\x0c\\\\x19\\\\xde\\\\xe9\\\\xeb\\\\x163\\\\x12\\\\xef1\\\\x00J\\\\x00\\\\xcc\\\\xda\\\\x13.\\\\xa8\\\\xd5\\\\xf4\\\\x1b\\\\x15\\\\xe8\\\\xd2\\\\xf6\\\\xfe\\\\xde\\\\xc5\\\\xf0\\\\xef<\\\\x15\\\\x18\\\\xa7\\\\xe3\\\\x05z\\\\x00\\\\xc0\\\\xfa\\\\xff\\\\x07\\\\xf8\\\\xc6\\\\xf5l\\\\xe2N\\\\x17\\\\x1b\\\\xf9\\\\xeb\\\\x1c\\\\x07&\\\\xe5\\\\x0b\\\\xe5\\\\x19\\\\xfe\\\\xbc\\\\xf7(6\\\\x1a\\\\xd1\\\\xff\\\\xf7\\\\xf6\\\\tFh1\\\\xe3\\\\xe1\\\\xed\\\\x00\\\\xd8\\\\x10\\\\xfe\\\\xe6\\\\xef\\\\x02\\\\x10\\\\xf8\\\\xd0\\\\x06\\\\xe5\\\\x07\\\\xce\\\\x00\\\\x1c\\\\xe8\\\\x01\\\\xd2\\\\xfd\\\\x0f\\\\xf1\\\\xe9\\\\x04\\\\xfc5\\\\xe0\\\\xf2C\\\\xfa\\\\x9a\\\\xd7\\\\xef\\\\xb4\\\\xf1\\\"\\\\xc5\\\\x1b\\\\xec\\\\n\\\\xdd$\\\\xe1\\\\x00\\\\x91\\\\x920\\\\xfb\\\\xbe=\\\\xdc\\\\xce\\\\x1d\\\\xef\\\\xe9\\\\x0708\\\\x0c\\\\x1a\\\\x00\\\\xe8\\\\xe0\\\\xeeC\\\\x07\\\\xfe7!?\\\\xfb\\\\xf3H\\\\x14\\\\xa4\\\\xec\\\\xe9\\\\xd9\\\\x18\\\\x919\\\\x17\\\\r\\\\xb8\\\\x160\\\\xf7\\\\x17\\\\t%\\\\xf9\\\\x1a\\\\xc2&\\\\x1b\\\\xf3\\\\xfb\\\\x01\\\\x11\\\\x0f\\\\xf0I\\\\xee)\\\\xf2\\\\xb4$\\\\x13\\\\x0b.biJ\\\\xeb\\\\xf7\\\\xaf\\\\x19\\\\xf6\\\\xfe\\\\xf7\\\\xfd\\\\x07\\\\xd2\\\\x13\\\\t\\\\xf8\\\\xf34\\\\x1e\\\\x1a1\\\\xd3\\\\x02\\\\xfc\\\\xfa\\\\xd4\\\\xee\\\\xde\\\\xda\\\\x0b\\\\xea\\\\xfb\\\\x7f\\\\xc3\\\\x13\\\\xf1\\\\x8c\\\\xb0\\\\xf7\\\\x0cI\\\\xf6\\\\xdce\\\\xee\\\\xed\\\\x1d\\\\x17\\\\xde\\\\xd4\\\\x14\\\\xf7\\\\xfb\\\\xaf\\\\xff\\\\x0e\\\"\\\\x007\\\\xaa\\\\xf1\\\\x06\\\\xc2\\\\x11\\\\x1b)\\\\xc4\\\\x11\\\\xe4\\\\xb6!\\\\xf2\\\\x15\\\\xe1\\\\x06\\\\x07\\\\xc4\\\\xe2m\\\\x18\\\\xe9\\\\t\\\\xf7\\\\x11\\\\x00!\\\\x1b\\\\x1d\\\\n;\\\\xdd\\\\xc1\\\\xd3\\\\x08\\\\xd3\\\\xd6\\\\x03\\\\xf7\\\\x08\\\\xd3\\\\xe5\\\\x16#\\\\xe59\\\\x03\\\\xd5\\\\xf4\\\\t\\\\x070\\\\x1d\\\\xdb\\\\x04\\\\r\\\\xbf\\\\xc8\\\\xf8\\\\r\\\\xf5\\\\x12\\\\xfd\\\\x1e,\\\\xc5P\\\\xe1G\\\\x0b\\\\x06\\\\x05\\\\xdd\\\\xc05\\\\xe0\\\\x0f/H\\\\xf8\\\\x08\\\\xf8\\\\x00\\\\xe9\\\\xed\\\\x1a)\\\\x80)\\\\xe8\\\\xff\\\\x13G\\\\xf3\\\\xe9\\\\x16\\\\x13\\\\xeb\\\\xfc\\\\xe0\\\\x0f;\\\\xf8\\\\xe9\\\\xf5#\\\\x05\\\\x07\\\\xae\\\\xc2\\\\x15?\\\\x18\\\\xdd\\\\x0e7\\\\xf5$\\\\xf1\\\\r1\\\\xd1\\\\xe9\\\\xe4\\\\xbe\\\\'\\\\xc8`\\\\x02\\\\x0f\\\\xeb\\\\xee\\\\t'\",\n          \"b'\\\\x03\\\\x00\\\\xf9\\\\xf8\\\\xf7\\\\xd9\\\\xe0\\\\x01\\\\xed\\\\x0e\\\\xf8;\\\\xcf\\\\xf6\\\\xf6\\\\xf1\\\\xd9\\\\xe6\\\\x043\\\\x03\\\\xea\\\\xf3\\\\xf7\\\\xd1\\\\xfa\\\\xea\\\\xd4\\\\xe9\\\\xe2\\\\xc6\\\\xa6\\\\xeb\\\\x7f\\\\x14\\\\x1a\\\\xe5\\\\t\\\\xf8\\\\x18\\\\x11\\\\xef)\\\\xe1e\\\\xd9\\\\x14\\\\x0b\\\\x0e\\\\xbe\\\\x0e\\\\xe5\\\\x03\\\\xbb\\\\x0f\\\\xec\\\\xdf\\\\xd0\\\\xdd \\\\'\\\\xfb\\\\xe5\\\\xee#\\\\xf2\\\\x14\\\\xdd\\\\xaf\\\\x12\\\\t&\\\\x15\\\\xd6\\\\r\\\\t\\\\xf2\\\\xdc\\\\x03\\\\x11\\\\n\\\\x16\\\\xd5\\\\xe6\\\\xda!\\\\xbc\\\\xf6\\\\x04\\\\n\\\\xdd\\\\xb4\\\\xde\\\\x02\\\\xac\\\\x15\\\\x02\\\\xe0;1\\\\xf3\\\\xd1\\\\xe4\\\\xde\\\\xc7\\\\xf5\\\\xdb\\\\xee%%\\\\x0b\\\"\\\\xca\\\\x17\\\\xec\\\\xe3\\\\xe6\\\\x17\\\\xcf\\\\x12\\\\x0f\\\\x07\\\\x05\\\\'\\\\xd2\\\\x1e\\\\x00\\\\x19\\\\r\\\\xe4\\\\xd5!\\\\xf1\\\\x06\\\\xcd\\\\x16\\\\xfc\\\\xe8\\\\xf2\\\\xfb\\\\xcd\\\\n\\\\xf0\\\\xdc\\\\x0b\\\\xdb\\\\xcb\\\\xec\\\\xf1&\\\\x1d\\\\x06\\\\xb8\\\\xfe\\\\xd8N\\\\x06m\\\\xf9/\\\\xebQ6\\\\x0e\\\\x02\\\"\\\\t\\\\xdf\\\\xd7\\\\x16#N\\\\xf3\\\\x02)\\\\xdc\\\\xe7\\\\xdb\\\\x0b\\\\t\\\\x00\\\\x16\\\\x12\\\\xdb,\\\\xf5\\\\x01\\\\xbe\\\\x0f\\\\xdb\\\\x1a\\\\x16\\\\xf9%\\\\xf5\\\\xf7\\\\xff\\\\xf0\\\\xdc\\\\xf4\\\\xfc\\\\x0b\\\\t\\\\xff\\\\xf8\\\\xe0\\\\xdc\\\\xe3\\\\xf8\\\\x19\\\\xf9\\\\x19\\\\xfe\\\\xd2\\\\x07\\\\xfb\\\\x04\\\\xf9\\\\xec+\\\\xf6\\\\x16\\\\xe7\\\\xc5\\\\xec\\\\x03\\\\xe4\\\\r\\\\xeb\\\\x10\\\\xf6\\\\x08/\\\\x0f\\\\xec\\\\xe7\\\\xb6\\\\x15+H\\\\x00\\\\xfa\\\\x11\\\\xe5\\\\xe3\\\\xfa\\\\x08(+\\\\xe6\\\\xeb\\\\xf3\\\\x06\\\\xf5$5\\\\xdd5\\\\x19\\\\x0e\\\\xc8G\\\\xf2P\\\\xfc\\\\x08\\\\xfa\\\\x00\\\\x0e\\\\x11\\\\xf4\\\\r\\\\x01\\\\xd3\\\\xf15)\\\\xca\\\\xf9\\\\xd1\\\\xf6\\\\x19\\\\x00#\\\\x1d\\\\x02\\\\x17Z\\\\t\\\\xf9\\\\xd8\\\\xeb\\\\x1e\\\\x17\\\\x05\\\\x10\\\\x04\\\\xf1\\\\xf2q\\\\xd0\\\\x12\\\\xbd\\\\xff\\\\xda\\\\xe6\\\\xf7\\\\xf5\\\\xd81)\\\\xeb\\\\xe32\\\\x0f\\\\xf33\\\\xf7\\\"\\\\x12\\\\r\\\\x0b\\\\xbe]-\\\\xc5Y\\\\xf2\\\\x87\\\\x148\\\\xe21\\\\x00\\\\xdf\\\\xa2\\\\x19\\\\xd8\\\\x1aR!\\\\xcb\\\\x17\\\\xc8\\\\xbe\\\\n4!\\\\xc5\\\\x14\\\\xc2\\\\x1c\\\\xd7\\\\xd5\\\\xf8\\\\xd2>\\\\x06\\\\xc2 d\\\\xdb\\\\x0b\\\\x01\\\\xf0\\\\x17\\\\x04\\\\xe9\\\"\\\\x06\\\\x02\\\\xff\\\\xf7\\\\xd8\\\\'\\\\x01\\\\x1a\\\\x00\\\\xeb\\\\xcfE\\\\x0b\\\\x19\\\\xd6p\\\\xe1\\\\x18\\\\n\\\\xf4\\\\xf3?\\\\x1a\\\\x18\\\\xe8(\\\\xe8\\\\xe7\\\\xff\\\\xf5\\\\x03\\\\x00\\\\xfat\\\\xe5\\\\xd8)\\\\xff\\\\xeaQ\\\\xf7 \\\\x0f\\\\xfb>\\\\x0c\\\\x11\\\\xdb\\\\x02\\\\xc7\\\\t\\\\x11\\\\xec\\\\xe4,\\\\xea\\\\n\\\\x11\\\\xf7\\\\x14\\\\xe1\\\\x1f#\\\\x12\\\\xf8\\\\xee\\\\xae\\\\xf4\\\\xdf\\\\xd5N\\\\xd2\\\\x14\\\\xe3\\\\xfe\\\\x18/\\\\xfd\\\\x0b\\\\x01\\\\xe2\\\\xd8\\\\xe7\\\\xeb\\\\x17\\\\xde&\\\\xfb\\\\'\\\\xc3\\\\xe6\\\\xf0\\\\x03\\\\xc4\\\\x05\\\\xf1\\\\xb5\\\\xda\\\\x89\\\\x7f\\\\xcd\\\\xe5\\\\x13\\\\x8eg\\\\x00(\\\\xec\\\"\\\\x0f%\\\\xc5\\\\xe7\\\\t\\\\xf25\\\\xbf\\\\xfa\\\\xfd\\\\xbd\\\\xfd\\\\x1b\\\\xb3\\\\xa8\\\\xe1\\\\r\\\\xac\\\\xf0\\\\x0c\\\\xf1\\\\xf1\\\\xf9\\\\xbc\\\\xfd\\\\x08\\\\xda\\\\xf9\\\\x00\\\\xa7\\\\xd5\\\\x056?\\\\xec\\\\x120\\\\x12\\\\xf7\\\\xc0C\\\\x0c\\\\xf7\\\\x07\\\\x02\\\\xfc$4\\\\xed\\\\xd5\\\\x19\\\\xde\\\\x13\\\\xad\\\\xf5\\\\xc1-l\\\\x04x\\\\xf4\\\\x18\\\\xe1\\\\xb4\\\\xd0\\\\xf3\\\\x0e\\\\xfb\\\\xdc\\\\xe4\\\\xd2\\\\x080\\\\xc5E#\\\\xc8\\\\xc0\\\\xe7\\\\n\\\\x1e\\\\xf2\\\\xd8\\\\xf8\\\"1\\\\xe2\\\\xd1_\\\\x00>\\\\xd8\\\\xc6\\\\xf0\\\\xc1\\\\xf4\\\\x87\\\\xa4\\\\xd9\\\\x0e\\\\xd1\\\\x00\\\\xee.\\\\x18\\\\'\\\\xd3\\\\xef\\\\xdc,\\\\x13\\\\xec\\\\xff4$\\\\xea\\\\xfe\\\\xfc\\\\xdc\\\\xfd\\\\xf7\\\\xfb\\\\x11\\\\xf4\\\\x05\\\\x01\\\\x01\\\\xf4\\\\x10\\\\x1e\\\\r\\\\x1a\\\\xf3\\\\x16*\\\\x0c\\\\xc7\\\\x1c\\\\xd8\\\\x0e-\\\\t\\\\xda\\\\xc1\\\\xf6\\\\t\\\\xf7\\\\xfd\\\\x18\\\\xbd\\\\xd3D%\\\\xaa3\\\\xcd\\\\xc56\\\\x1c\\\\xc7\\\\xd3\\\\xe2\\\\xd8\\\\xc2\\\\xd97\\\\xf4\\\"&\\\\xd5\\\\xf2\\\\xd1\\\\xee\\\\xf8\\\\x1b\\\\x16\\\\xf3\\\\x0c5\\\\x08\\\\xe2<\\\\xf4\\\\xd8\\\\xf20\\\\x0e\\\\xdd(\\\\xc5\\\\xef\\\\t\\\\xcb\\\\x15\\\\xdf\\\\xaf\\\\xd4\\\\xe8\\\\xf89E#7\\\\xc2\\\\x02\\\\xf3\\\\x1a\\\\x1b\\\\xcc3\\\\xd2\\\\xdc\\\\xcd\\\\x06\\\\x01h\\\\xc0P\\\\x06\\\\xbc\\\\xed4\\\\x1b\\\\xfa\\\\x00\\\\x1b%!\\\\r\\\\x02\\\\xa0P\\\\xfa&/\\\\xe7\\\\xb0\\\\xe0\\\\'\\\\x00\\\\'X$\\\\xb9\\\\xec\\\\xa9\\\\xda\\\\xf5\\\\x10\\\\xcb\\\\xf2\\\\xef\\\\x18\\\\xfe\\\\x1d\\\\xec\\\\x8c?>K\\\\x18\\\\xd7\\\\xb3+\\\\xfd\\\\n\\\\x01\\\\xe1\\\\x0e\\\\x1b\\\\x0f@\\\\x0c\\\\x18?\\\\xf8\\\\xfc\\\\xd3\\\\xf8\\\\xbe\\\\r\\\\xe9\\\\x05\\\\xe9\\\\xe5\\\\x11\\\\x05\\\\x03\\\\xf5\\\\x0c\\\\xef\\\\x13\\\\xda\\\\x1e1\\\\x1c\\\\xef\\\\x04\\\\xa6\\\\x12\\\\xfe\\\\x00\\\\x18C\\\\x07\\\\x0c\\\\xb7\\\\xe3\\\\xb9<+_\\\\x9f\\\\xf53L\\\\n@\\\\x07\\\\x02%\\\\x0f\\\\r\\\\xf0\\\\x18\\\\x00\\\\xdf\\\\r\\\\xe6\\\\xce6\\\\x113\\\\x0f\\\\x17;\\\\xeb\\\\x0c\\\\xb7QV\\\\x04\\\\xf3,\\\\xdd\\\\x0f0(\\\\x042 \\\\xae\\\\xf5\\\\x1c:\\\\x12\\\\'J1\\\\xe4\\\\xec\\\\x1a\\\\xfe\\\\xf1D\\\\xf0\\\\xfeC\\\\xc3\\\\xd6\\\\x16\\\\xfb\\\\xb7( *\\\\xfc\\\\x15\\\\x113\\\\x02\\\\xe4&J\\\\xe1\\\\xfa\\\\xc8\\\\x194\\\\xf4\\\\xe9\\\\xeb\\\\xdc\\\\xcd)2\\\\r\\\\x02\\\\xe4\\\\x16\\\\x05\\\\xfd\\\\x08\\\\xeb\\\\xf2\\\\x8b\\\\xe4\\\\xe3\\\\xf0\\\\xa1<\\\\x17(\\\\x13\\\\x0e\\\\xd2\\\\x08\\\\xfd!\\\\x0c\\\\xeb\\\\xf4\\\\xd9\\\\x1b\\\\x08\\\\xe6\\\\xc5\\\\xe87\\\\xd6\\\\xe4\\\\x05\\\\xe3\\\\xec_\\\\x1f\\\\xf4\\\\x06\\\\xfc\\\\xe9\\\\x12\\\\x02?\\\\xec\\\\xf4\\\\xf0\\\\x05\\\\x02\\\\xf5\\\\x04\\\\xe8\\\\xd9\\\\xfb\\\\xf3\\\\xee\\\\xc7\\\\xb3\\\\xd8\\\\x1d\\\\xdd\\\\xe4(\\\\xf6\\\\xce\\\\xf0\\\\xd9\\\\x1d8\\\\xcf \\\\t\\\\xd2\\\\x03\\\\x174\\\\xd9\\\\xf9\\\\x10 L\\\\x05\\\\x0b\\\\xfd\\\\xd5\\\\xc9\\\\xd73\\\\x16\\\\xff\\\\x08\\\\xf0\\\\xda\\\\x18&\\\\xf0\\\\x0c\\\\xed\\\\n\\\\x11\\\\xe4\\\\x17\\\\x00\\\\xe5\\\\n\\\\xdc<#\\\\xee<?\\\\xed9\\\\xe8\\\\xe3@\\\\x0e\\\\x15\\\\xd6 \\\\x11\\\\x1d\\\\x0e,\\\\xc9\\\\xdf\\\\xf1\\\\x18\\\\xdf\\\\xe03\\\\x1b8\\\\xf6\\\\x92\\\\xe8 \\\\xe2\\\\x01\\\\xf5\\\\xf1\\\\x17\\\\x0e;\\\\xfd\\\\x0c\\\\xcf\\\\x10\\\\x00'\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}",
              "type": "dataframe",
              "variable_name": "sentences_df"
            },
            "text/html": [
              "\n",
              "  <div id=\"df-24ad371f-a315-4de9-8bb5-8a32d86aea7d\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sentence</th>\n",
              "      <th>float32_embedding</th>\n",
              "      <th>bson_float32_embedding</th>\n",
              "      <th>bson_int8_embedding</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Water boils at 100 degrees Celsius at standard...</td>\n",
              "      <td>[0.058654785, 0.02130127, -0.02558899, -0.0517...</td>\n",
              "      <td>b'\\'\\x00\\x00@p=\\x00\\x80\\xae&lt;\\x00\\xa0\\xd1\\xbc\\x...</td>\n",
              "      <td>b'\\x03\\x00J\\x1a\\xdf\\xbe\\x1d\\xd1\\x18\\x14\\xcc8\\x...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>The Great Wall of China is visible from space.</td>\n",
              "      <td>[0.03451538, 0.026901245, 0.008277893, 0.01005...</td>\n",
              "      <td>b'\\'\\x00\\x00`\\r=\\x00`\\xdc&lt;\\x00\\xa0\\x07&lt;\\x00\\xc...</td>\n",
              "      <td>b'\\x03\\x00+!\\t\\x0c\\xd9\\xd9\\x10\\xb1\\x05\\x1a\\xe6...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Photosynthesis converts light energy into chem...</td>\n",
              "      <td>[-0.021697998, -0.02961731, -0.005004883, 0.02...</td>\n",
              "      <td>b'\\'\\x00\\x00\\xc0\\xb1\\xbc\\x00\\xa0\\xf2\\xbc\\x00\\x...</td>\n",
              "      <td>b'\\x03\\x00\\xe4\\xda\\xf9\\x1e\\xb8\\xed\\x12\\x03\\xd9...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>DNA contains the genetic instructions for all ...</td>\n",
              "      <td>[-0.020843506, -0.022567749, -0.033996582, -0....</td>\n",
              "      <td>b'\\'\\x00\\x00\\xc0\\xaa\\xbc\\x00\\xe0\\xb8\\xbc\\x00@\\...</td>\n",
              "      <td>b'\\x03\\x00\\xe5\\xe3\\xd4\\xe5\\xd5\\x05\\xf2(\\nL\\xe4...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Jupiter is the largest planet in our solar sys...</td>\n",
              "      <td>[-0.061828613, -0.016860962, -0.059539795, 0.0...</td>\n",
              "      <td>b'\\'\\x00\\x00@}\\xbd\\x00 \\x8a\\xbc\\x00\\xe0s\\xbd\\x...</td>\n",
              "      <td>b'\\x03\\x00\\xb1\\xea\\xb4\\x00\\xd1\\xe1\\xf8E\\xbd\\x1...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-24ad371f-a315-4de9-8bb5-8a32d86aea7d')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-24ad371f-a315-4de9-8bb5-8a32d86aea7d button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-24ad371f-a315-4de9-8bb5-8a32d86aea7d');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-74564a7b-c35a-49c4-8382-5b90b0b1babb\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-74564a7b-c35a-49c4-8382-5b90b0b1babb')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-74564a7b-c35a-49c4-8382-5b90b0b1babb button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "text/plain": [
              "                                            sentence  \\\n",
              "0  Water boils at 100 degrees Celsius at standard...   \n",
              "1     The Great Wall of China is visible from space.   \n",
              "2  Photosynthesis converts light energy into chem...   \n",
              "3  DNA contains the genetic instructions for all ...   \n",
              "4  Jupiter is the largest planet in our solar sys...   \n",
              "\n",
              "                                   float32_embedding  \\\n",
              "0  [0.058654785, 0.02130127, -0.02558899, -0.0517...   \n",
              "1  [0.03451538, 0.026901245, 0.008277893, 0.01005...   \n",
              "2  [-0.021697998, -0.02961731, -0.005004883, 0.02...   \n",
              "3  [-0.020843506, -0.022567749, -0.033996582, -0....   \n",
              "4  [-0.061828613, -0.016860962, -0.059539795, 0.0...   \n",
              "\n",
              "                              bson_float32_embedding  \\\n",
              "0  b'\\'\\x00\\x00@p=\\x00\\x80\\xae<\\x00\\xa0\\xd1\\xbc\\x...   \n",
              "1  b'\\'\\x00\\x00`\\r=\\x00`\\xdc<\\x00\\xa0\\x07<\\x00\\xc...   \n",
              "2  b'\\'\\x00\\x00\\xc0\\xb1\\xbc\\x00\\xa0\\xf2\\xbc\\x00\\x...   \n",
              "3  b'\\'\\x00\\x00\\xc0\\xaa\\xbc\\x00\\xe0\\xb8\\xbc\\x00@\\...   \n",
              "4  b'\\'\\x00\\x00@}\\xbd\\x00 \\x8a\\xbc\\x00\\xe0s\\xbd\\x...   \n",
              "\n",
              "                                 bson_int8_embedding  \n",
              "0  b'\\x03\\x00J\\x1a\\xdf\\xbe\\x1d\\xd1\\x18\\x14\\xcc8\\x...  \n",
              "1  b'\\x03\\x00+!\\t\\x0c\\xd9\\xd9\\x10\\xb1\\x05\\x1a\\xe6...  \n",
              "2  b'\\x03\\x00\\xe4\\xda\\xf9\\x1e\\xb8\\xed\\x12\\x03\\xd9...  \n",
              "3  b'\\x03\\x00\\xe5\\xe3\\xd4\\xe5\\xd5\\x05\\xf2(\\nL\\xe4...  \n",
              "4  b'\\x03\\x00\\xb1\\xea\\xb4\\x00\\xd1\\xe1\\xf8E\\xbd\\x1...  "
            ]
          },
          "execution_count": 14,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "sentences_df.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Y2L93ADWUnaN"
      },
      "source": [
        "# **Step 5: Data Ingestion With MongoDB**\n",
        "\n",
        "For this step, you will need a MongoDB account to retrieve a connection string to a cluster.\n",
        "\n",
        "Creating a database and collection within MongoDB is simple with MongoDB Atlas.\n",
        "1. First, register for a [MongoDB Atlas account](https://www.mongodb.com/cloud/atlas/register). Existing users can sign into MongoDB Atlas.\n",
        "2. [Follow the instructions](https://www.mongodb.com/docs/atlas/tutorial/deploy-free-tier-cluster/). Select Atlas UI as the procedure to deploy your first cluster.\n",
        "3. Follow MongoDB’s steps to [get the connection string](https://www.mongodb.com/docs/manual/reference/connection-string/) from the Atlas UI. Securely store the URI within your development environment after setting up the database and obtaining the Atlas cluster connection URI.\n",
        "\n",
        "\n",
        "> NOTE: Don’t forget to add the IP of your host machine to the [IP\n",
        "> access\n",
        "> list](https://www.mongodb.com/docs/atlas/security/ip-access-list/#view-ip-access-list-entries)\n",
        "> for your cluster."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "hcuDb-gpV4E6",
        "outputId": "d35360f3-d045-4ab3-9dc7-b3234bf81899"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Enter MongoDB URI: ··········\n"
          ]
        }
      ],
      "source": [
        "MONGO_URI = getpass.getpass(\"Enter MongoDB URI: \")\n",
        "os.environ[\"MONGO_URI\"] = MONGO_URI"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "e4VZRAyHBKBI"
      },
      "outputs": [],
      "source": [
        "import pymongo\n",
        "\n",
        "\n",
        "def get_mongo_client(mongo_uri):\n",
        "    \"\"\"Establish and validate connection to the MongoDB.\"\"\"\n",
        "\n",
        "    client = pymongo.MongoClient(\n",
        "        mongo_uri, appname=\"devrel.showcase.quantized_cohere.python\"\n",
        "    )\n",
        "\n",
        "    # Validate the connection\n",
        "    ping_result = client.admin.command(\"ping\")\n",
        "    if ping_result.get(\"ok\") == 1.0:\n",
        "        # Connection successful\n",
        "        print(\"Connection to MongoDB successful\")\n",
        "        return client\n",
        "    print(\"Connection to MongoDB failed\")\n",
        "    return None\n",
        "\n",
        "\n",
        "if not MONGO_URI:\n",
        "    print(\"MONGO_URI not set in environment variables\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "tLABMbciWBlj",
        "outputId": "81d3eb20-deab-4f71-9598-9893766b7cf8"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Connection to MongoDB successful\n"
          ]
        }
      ],
      "source": [
        "mongo_client = get_mongo_client(MONGO_URI)\n",
        "\n",
        "db = mongo_client[\"quantized\"]\n",
        "col = db[\"data\"]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_oQ1FBCwWByR",
        "outputId": "410e426e-17ee-401c-ea55-8e2b142d2961"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "DeleteResult({'n': 20, 'electionId': ObjectId('7fffffff0000000000000033'), 'opTime': {'ts': Timestamp(1727822733, 20), 't': 51}, 'ok': 1.0, '$clusterTime': {'clusterTime': Timestamp(1727822733, 20), 'signature': {'hash': b'?e_ \\xaf\\x8c1\\xb4\\x86\\x83%W\\xc1U\\xa8Rc\\x9dX\\xab', 'keyId': 7390008424139849730}}, 'operationTime': Timestamp(1727822733, 20)}, acknowledged=True)"
            ]
          },
          "execution_count": 17,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# Delete existing collection\n",
        "col.delete_many({})"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "wqWF6tCjWB0m",
        "outputId": "aeb79efd-b901-4ce6-fc03-23e5a5488281"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "InsertManyResult([ObjectId('66fc7b8f828da1d0760be746'), ObjectId('66fc7b8f828da1d0760be747'), ObjectId('66fc7b8f828da1d0760be748'), ObjectId('66fc7b8f828da1d0760be749'), ObjectId('66fc7b8f828da1d0760be74a'), ObjectId('66fc7b8f828da1d0760be74b'), ObjectId('66fc7b8f828da1d0760be74c'), ObjectId('66fc7b8f828da1d0760be74d'), ObjectId('66fc7b8f828da1d0760be74e'), ObjectId('66fc7b8f828da1d0760be74f'), ObjectId('66fc7b8f828da1d0760be750'), ObjectId('66fc7b8f828da1d0760be751'), ObjectId('66fc7b8f828da1d0760be752'), ObjectId('66fc7b8f828da1d0760be753'), ObjectId('66fc7b8f828da1d0760be754'), ObjectId('66fc7b8f828da1d0760be755'), ObjectId('66fc7b8f828da1d0760be756'), ObjectId('66fc7b8f828da1d0760be757'), ObjectId('66fc7b8f828da1d0760be758'), ObjectId('66fc7b8f828da1d0760be759')], acknowledged=True)"
            ]
          },
          "execution_count": 18,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# Ingest data into mongodb collection\n",
        "col.insert_many(sentences_df.to_dict(\"records\"))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-229tKPvXNjE"
      },
      "source": [
        "# **Step 6: Create Vector Index**\n",
        "\n",
        "In this step, we will create a critical component that facilitates vector search operations, a vector index. The `setup_vector_search_index` function creates a vector index, a specialized structure that significantly enhances the performance of similarity searches across embedding vectors.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "Al0-45T3XY1P"
      },
      "outputs": [],
      "source": [
        "# Programmatically create vector search index for both colelctions\n",
        "import time\n",
        "\n",
        "from pymongo.operations import SearchIndexModel\n",
        "\n",
        "\n",
        "def setup_vector_search_index(collection, index_definition, index_name=\"vector_index\"):\n",
        "    \"\"\"\n",
        "    Setup a vector search index for a MongoDB collection and wait for 30 seconds.\n",
        "\n",
        "    Args:\n",
        "    collection: MongoDB collection object\n",
        "    index_definition: Dictionary containing the index definition\n",
        "    index_name: Name of the index (default: \"vector_index\")\n",
        "    \"\"\"\n",
        "    new_vector_search_index_model = SearchIndexModel(\n",
        "        definition=index_definition, name=index_name, type=\"vectorSearch\"\n",
        "    )\n",
        "\n",
        "    # Create the new index\n",
        "    try:\n",
        "        result = collection.create_search_index(model=new_vector_search_index_model)\n",
        "        print(f\"Creating index '{index_name}'...\")\n",
        "\n",
        "        # Sleep for 30 seconds\n",
        "        print(f\"Waiting for 30 seconds to allow index '{index_name}' to be created...\")\n",
        "        time.sleep(30)\n",
        "\n",
        "        print(f\"30-second wait completed for index '{index_name}'.\")\n",
        "        return result\n",
        "\n",
        "    except Exception as e:\n",
        "        print(f\"Error creating new vector search index '{index_name}': {e!s}\")\n",
        "        return None"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4IPm2zo8Cj_l"
      },
      "source": [
        "The code snippet above utilizes MongoDB's `SearchIndexModel` to define a vector search index. One operation to highlight is the 30-second wait period post-index creation. This ensures the index is fully built and optimized, preventing potential race conditions in subsequent query operations.\n",
        "\n",
        "The next step is to initialize the variable `vector_search_index_definition` that is assigned to the actual vector index, which is configured for multiple vector fields, each corresponding to different embedding formats (float32, BSON float32, and BSON int8). By setting up this index, we enable efficient cosine similarity searches across our 1024-dimensional embedding space."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "R1z4PBq3XhPG"
      },
      "outputs": [],
      "source": [
        "dimensions = 1024  # Output dimensions for vectors generated by Cohere's embed-english-v3.0 embedding model\n",
        "\n",
        "vector_search_index_definition = {\n",
        "    \"fields\": [\n",
        "        {\n",
        "            \"type\": \"vector\",\n",
        "            \"path\": \"float32_embedding\",\n",
        "            \"numDimensions\": dimensions,\n",
        "            \"similarity\": \"cosine\",\n",
        "        },\n",
        "        {\n",
        "            \"type\": \"vector\",\n",
        "            \"path\": \"bson_float32_embedding\",\n",
        "            \"numDimensions\": dimensions,\n",
        "            \"similarity\": \"cosine\",\n",
        "        },\n",
        "        {\n",
        "            \"type\": \"vector\",\n",
        "            \"path\": \"bson_int8_embedding\",\n",
        "            \"numDimensions\": dimensions,\n",
        "            \"similarity\": \"cosine\",\n",
        "        },\n",
        "    ]\n",
        "}"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 87
        },
        "id": "1HS10UsLYHhb",
        "outputId": "60b6afc8-fddc-494c-d7e5-ce556d92c310"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Creating index 'vector_index'...\n",
            "Waiting for 30 seconds to allow index 'vector_index' to be created...\n",
            "30-second wait completed for index 'vector_index'.\n"
          ]
        },
        {
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            },
            "text/plain": [
              "'vector_index'"
            ]
          },
          "execution_count": 71,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "setup_vector_search_index(\n",
        "    col, vector_search_index_definition, index_name=\"vector_index\"\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "crzahcFGXTbz"
      },
      "source": [
        "# **Step 7: Create Vector Search Function**\n",
        "\n",
        "In this step, we'll define the `vector_search` function that leverages MongoDB's powerful aggregation framework to perform efficient vector search operations. This function is the intermediary layer between user queries and our database of sentence embeddings, enabling semantic search or RAG capabilities in your AI applications.\n",
        "\n",
        "The `vector_search` function accommodates different types of embeddings and search strategies. It takes a user's input query, typically a sentence from the application layer, and transforms it into a vector representation using our previously defined `get_cohere_embeddings` function. This embedding, stored in the `query_embedding` variable, becomes the basis for our similarity search.\n",
        "\n",
        "A key feature of this function is its ability to handle both quantized and non-quantized embeddings. By incorporating a check for the embedding type, we can dynamically adjust our search parameters to utilize either the space-efficient quantized (int8) embeddings or the higher-precision non-quantized (float32) embeddings.\n",
        "\n",
        "By leveraging MongoDB's aggregation pipeline, we'll construct a series of stages that process our data, perform the vector similarity search, and return the most relevant results."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "rMVpHr9aXKRq"
      },
      "outputs": [],
      "source": [
        "def vector_search(user_query, collection, quantized=False, use_bson=True):\n",
        "    \"\"\"\n",
        "    Perform a vector search in the MongoDB collection based on the user query.\n",
        "\n",
        "    Args:\n",
        "    user_query (str): The user's query string.\n",
        "    collection (MongoCollection): The MongoDB collection to search.\n",
        "\n",
        "    Returns:\n",
        "    list: A list of matching documents.\n",
        "    \"\"\"\n",
        "\n",
        "    path = None\n",
        "    query_embedding = None\n",
        "\n",
        "    # Generate embedding for the user query\n",
        "    query_embedding = get_cohere_embeddings([user_query])\n",
        "\n",
        "    if query_embedding is None:\n",
        "        return \"Invalid query or embedding generation failed.\"\n",
        "\n",
        "    if quantized:\n",
        "        query_embedding = query_embedding[1][0]\n",
        "        path = \"int8_embedding\"\n",
        "    else:\n",
        "        query_embedding = query_embedding[0][0]\n",
        "        path = \"float32_embedding\"\n",
        "\n",
        "    # Adjust path and convert vectors to BSON vectors if use_bson is True\n",
        "    if use_bson:\n",
        "        path = \"bson_\" + path\n",
        "        if quantized:\n",
        "            query_embedding = generate_bson_vector(\n",
        "                query_embedding, BinaryVectorDtype.INT8\n",
        "            )\n",
        "        else:\n",
        "            query_embedding = generate_bson_vector(\n",
        "                query_embedding, BinaryVectorDtype.FLOAT32\n",
        "            )\n",
        "\n",
        "    # Define the vector search pipeline\n",
        "    vector_search_stage = {\n",
        "        \"$vectorSearch\": {\n",
        "            \"index\": \"vector_index\",\n",
        "            \"queryVector\": query_embedding,\n",
        "            \"path\": path,\n",
        "            \"numCandidates\": 150,  # Number of candidate matches to consider\n",
        "            \"limit\": 5,  # Return top 5 matches\n",
        "        }\n",
        "    }\n",
        "\n",
        "    project_stage = {\n",
        "        \"$project\": {\n",
        "            \"_id\": 0,  # Exclude the _id field\n",
        "            \"sentence\": 1,  # Include the sentence field\n",
        "            \"similarityScore\": {\n",
        "                \"$meta\": \"vectorSearchScore\"  # Include the search score\n",
        "            },\n",
        "        }\n",
        "    }\n",
        "\n",
        "    pipeline = [vector_search_stage, project_stage]\n",
        "\n",
        "    # Execute the search\n",
        "    results = collection.aggregate(pipeline)\n",
        "    return list(results)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PsFQknUWCuIY"
      },
      "source": [
        "The key operations of the code snippet above and the `vector_search` function are as follows:\n",
        "1. Embedding generation: The `get_cohere_embeddings` function converts the user's query into a vector representation.\n",
        "2. Embedding type selection: Based on the `quantized` flag, it chooses between float32 and int8 embeddings, adjusting the search path accordingly.\n",
        "3. BSON conversion: If `use_bson` is True, the embedding is converted to BSON format using the ` generate_bson_vector` function, optimizing MongoDB storage and retrieval.\n",
        "4. Search pipeline construction: The function builds a MongoDB aggregation pipeline with two stages:\n",
        "- `$vectorSearch`: This utilizes the pre-created vector index for efficient similarity search. This operator takes the search query embedding as input, the path to the location of embedding data located in the collection, the number of candidates to consider for similarity, and the number of documents to be retrieved by the vector stage.\n",
        "-`$project`: This shapes the output, including the original sentence and a similarity score.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "jbsc0uSVZijX"
      },
      "source": [
        "# **Step 8: Run Vector Search Query**\n",
        "\n",
        "In this step, we will use the `vector_search` function across different embedding configurations. This comparison allows us to evaluate the performance and accuracy of various vector representations in semantic search tasks.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "eGhl_DiZZh5u"
      },
      "outputs": [],
      "source": [
        "results_bson_float = vector_search(\n",
        "    \"what is the speed of light?\", col, quantized=False, use_bson=True\n",
        ")\n",
        "results_bson_int8 = vector_search(\n",
        "    \"what is the speed of light?\", col, quantized=True, use_bson=True\n",
        ")\n",
        "results_float = vector_search(\n",
        "    \"what is the speed of light?\", col, quantized=False, use_bson=False\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GWK9z3DwC2iS"
      },
      "source": [
        "In the code snippet above, we execute three distinct vector searches using the query \"what is the speed of light?\" each targeting a different embedding format:\n",
        "\n",
        "1. `results_bson_float`: Uses BSON-encoded float32 embeddings, combining the precision of floating-point numbers with the efficiency of BSON storage\n",
        "2. `results_bson_int8`: Utilizes BSON-encoded quantized (int8) embeddings, offering a more compact representation that may trade some precision for improved storage and query efficiency\n",
        "3. `` `results_float` ``: Uses standard float32 embeddings without BSON encoding, serving as a baseline for comparison\n",
        "\n",
        "These results will provide insights into how different embedding representations affect semantic search outcomes, helping you choose the most suitable approach for your specific use cases; typical factors to consider are storage optimization, search speed, and result precision."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "xPQNgfKRXKUx",
        "outputId": "5b4e49bf-7114-4881-fc4e-4eaabe814f09"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Float32 Results\n",
            "[{'sentence': 'The speed of light in vacuum is 299,792,458 meters/second.',\n",
            "  'similarityScore': 0.8345031142234802},\n",
            " {'sentence': 'Water boils at 100 degrees Celsius at standard atmospheric '\n",
            "              'pressure.',\n",
            "  'similarityScore': 0.7116270065307617},\n",
            " {'sentence': 'Jupiter is the largest planet in our solar system.',\n",
            "  'similarityScore': 0.7062681317329407},\n",
            " {'sentence': 'DNA contains the genetic instructions for all living organisms.',\n",
            "  'similarityScore': 0.6969594955444336},\n",
            " {'sentence': 'There are 118 elements in the periodic table.',\n",
            "  'similarityScore': 0.695982813835144}]\n",
            "-----------------\n",
            "\n",
            "BSON Float32 Results\n",
            "[{'sentence': 'The speed of light in vacuum is 299,792,458 meters/second.',\n",
            "  'similarityScore': 0.8345031142234802},\n",
            " {'sentence': 'Water boils at 100 degrees Celsius at standard atmospheric '\n",
            "              'pressure.',\n",
            "  'similarityScore': 0.7116270065307617},\n",
            " {'sentence': 'Jupiter is the largest planet in our solar system.',\n",
            "  'similarityScore': 0.7062681317329407},\n",
            " {'sentence': 'DNA contains the genetic instructions for all living organisms.',\n",
            "  'similarityScore': 0.6969594955444336},\n",
            " {'sentence': 'There are 118 elements in the periodic table.',\n",
            "  'similarityScore': 0.695982813835144}]\n",
            "-----------------\n",
            "\n",
            "BSON Int8 Results\n",
            "[{'sentence': 'The speed of light in vacuum is 299,792,458 meters/second.',\n",
            "  'similarityScore': 0.8344717025756836},\n",
            " {'sentence': 'Water boils at 100 degrees Celsius at standard atmospheric '\n",
            "              'pressure.',\n",
            "  'similarityScore': 0.7123053669929504},\n",
            " {'sentence': 'Jupiter is the largest planet in our solar system.',\n",
            "  'similarityScore': 0.7069313526153564},\n",
            " {'sentence': 'DNA contains the genetic instructions for all living organisms.',\n",
            "  'similarityScore': 0.6975141763687134},\n",
            " {'sentence': 'There are 118 elements in the periodic table.',\n",
            "  'similarityScore': 0.6969249844551086}]\n",
            "-----------------\n"
          ]
        }
      ],
      "source": [
        "import pprint\n",
        "\n",
        "print(\"Float32 Results\")\n",
        "pprint.pprint(results_float)\n",
        "print(\"-----------------\")\n",
        "print()\n",
        "print(\"BSON Float32 Results\")\n",
        "pprint.pprint(results_bson_float)\n",
        "print(\"-----------------\")\n",
        "print()\n",
        "print(\"BSON Int8 Results\")\n",
        "pprint.pprint(results_bson_int8)\n",
        "print(\"-----------------\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "j6m_lmB_DA1V"
      },
      "source": [
        "# Conclusion"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PZiXIAbaC5zr"
      },
      "source": [
        "All code presented in the steps outlined in this tutorial are available on [GitHub](https://github.com/mongodb-developer/GenAI-Showcase/blob/main/notebooks/advanced_techniques/quantized_vector_ingestion_with_cohere_and_mongodb.ipynb).\n",
        "\n",
        "Based on these results, we can draw several important conclusions about the benefits of quantization and BSON encoding in vector search operations:\n",
        "\n",
        "We will start off with an important consideration, which is **accuracy preservation**. The results demonstrate that MongoDB’s native support for Vectors in BSON and quantization maintain a high degree of accuracy in semantic search. The top result for all three methods is identical, correctly identifying the sentence about the speed of light, with very similar similarity scores (0.8345 for float32 and BSON float32, 0.8344 for BSON int8).\n",
        "\n",
        "Another factor to consider is the **consistency across formats**. The order of results and the similarity scores are remarkably consistent across all three formats. This suggests that the use of BSON encoding and even quantization to int8 does not significantly compromise the quality of search results. Based on this, let’s recap the benefits of BSON and quantized vectors for AI applications.\n",
        "\n",
        "**1. Benefits of native vector BSON type:**\n",
        "   - Storage efficiency: While not directly visible in the results from this tutorial, BSON encoding typically offers more compact storage compared to raw float32 values, potentially reducing database size. Follow the [advanced notebook](https://github.com/mongodb-developer/GenAI-Showcase/blob/main/notebooks/advanced_techniques/advanced_evaluation_of_quantized_vectors_using_cohere_mongodb_beir.ipynb) to get an overview of BSON's storage efficiency.\n",
        "   - Query performance: BSON's binary format can lead to faster serialization/deserialization, potentially improving query speeds in large-scale applications.\n",
        "\n",
        "**2. Advantages of quantization (int8):**\n",
        "   - Space efficiency: Int8 representation requires significantly less storage space compared to float32, which can be crucial for large datasets.\n",
        "   - Potential performance gains: Reduced data size can lead to faster data transfer and potentially quicker computations, which is especially beneficial for resource-constrained environments.\n",
        "\n",
        "**3. Minimal precision loss:**\n",
        "The slight variations in similarity scores for the BSON int8 results (e.g., 0.8344 vs 0.8345 for the top result) indicate that the precision loss from quantization is minimal and does not affect the overall ranking of results.\n",
        "\n",
        "The results of this tutorial demonstrate that you can leverage the benefits of both BSON encoding and quantization without significant compromise to search accuracy.\n",
        "\n",
        "In an internal experiment, we compared the storage efficiency of different representations for vector embeddings: floats and BSON vectors using float32 precision. The test dataset consisted of three million documents, each containing embeddings generated by the cohere-embed-multilingual-v3.0 model with 1024 dimensions, like this tutorial. The results were as follows:\n",
        "\n",
        "| 3M docs, cohere-embed-multilingual-v3.0@1024d | MongoDB Storage Size (GB) |\n",
        "|-----------------------------------------------|---------------------------|\n",
        "| Array of floats                               | 41                        |\n",
        "| BSON Vectors float32                          | 14                        |\n",
        "\n",
        "This comparison demonstrates a significant reduction in storage requirements when using BSON vectors with float32 precision. The BSON representation required only about 34% of the storage space needed for the array of floats representation, resulting in approximately 66% space savings. This substantial difference in storage efficiency has important implications for large-scale vector databases.\n",
        "\n",
        "BSON encoding offers improved storage and potential performance benefits, while further quantization to int8 from float32 embeddings, as in this tutorial, can provide additional space savings with negligible impact on result quality.\n",
        "\n",
        "The choice between these formats (array of floats, BSON vectors, or quantized representations) should be based on specific application needs, balancing storage constraints, processing speed requirements, and the level of precision required for the particular use case.\n",
        "\n",
        "A key takeaway is that MongoDB Atlas enhances your AI stack by providing robust indexing support for quantized embedding model outputs from providers such as Cohere. This capability significantly improves the scalability of AI workloads, particularly those involving vector search, allowing them to handle substantially higher volumes. The smaller memory footprint of quantized embeddings results in more efficient storage utilization and cost-effectiveness. These features make MongoDB Atlas an excellent choice for organizations looking to optimize their AI applications, particularly those involving large-scale vector search operations.\n",
        "\n",
        "This tutorial covers an introductory approach to evaluating the benefits of quantized embeddings. For a more detailed and advanced exploration of the memory optimization benefits of quantized vectors and BSON data format, check out the [GitHub notebook.](https://github.com/mongodb-developer/GenAI-Showcase/blob/main/notebooks/advanced_techniques/advanced_evaluation_of_quantized_vectors_using_cohere_mongodb_beir.ipynb)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "zY3weXcSC_F1"
      },
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [
        "6ReN61zKS7F2",
        "5qxP9bE1OzDq",
        "sPAFgdtXPOWl",
        "bJ8a3nvA6DwQ",
        "Y2L93ADWUnaN",
        "-229tKPvXNjE",
        "crzahcFGXTbz",
        "jbsc0uSVZijX"
      ],
      "provenance": [],
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    },
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "state": {}
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
